2012年3月18日日曜日

onTouch sample code

onTouch sample code

利用者がViewを操作した場合、その操作は当該Viewのみに限定されるのであって、他のView、例えば、親のViewに自動的に処理が移るというのではない。
もし、他のViewに処理を移し替えたい場合には、そのようにcodeを書かなければならない。

public class OnTouchActivity extends Activity
    implements
    OnTouchListener,
    OnClickListener
    {
    TextView tvValue, tvResult;
    Button buMain, buSub;
    boolean bReturnTrue;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvValue = (TextView)findViewById(R.id.TextReturnValue);
        tvResult = (TextView)findViewById(R.id.TextResult);
        buMain = (Button)findViewById(R.id.ButtonMain);
        buMain.setOnClickListener(this);
        buSub = (Button)findViewById(R.id.ButtonSub);
        buSub.setOnTouchListener(this);
        buSub.setOnClickListener(this);
        DisplayValue(false);
    }
    
    void DisplayValue(boolean b){
        String s;
        bReturnTrue = b;
        if(b==true) s= "Return Value onTouch : true";
        else s = "Return Value onTouch : false";
        tvValue.setText(s);
    }
    
    /*
     * onClickメソッドの実行の前に、onTouchメソッドが実行される。
     * onTouchメソッドにおいてfalseを返した場合、そのViewを引数とするonClickメソッドが呼ばれる。
     * trueを返した場合、onClickメソッドは呼ばれない。
     */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        tvResult.setText("");
        if(v==buSub){
            if(bReturnTrue==true){
                //trueを返すことによりbuSubのonClickメソッドは呼ばれなくなる。
                return true;
            }
        }
        return false;
    }


    //onTouchメソッドにおける戻値がfalseの場合に、onClickメソッドが呼ばれる。
    @Override
    public void onClick(View v) {
        if(v==buMain){
            if(bReturnTrue==true) DisplayValue(false);
            else DisplayValue(true);
            return;
        }
        
        //buSubのonTouchメソッドの戻値がtrueの場合、onClickメソッドは呼ばれない。
        if(v==buSub){
            tvResult.setText("onClick : ButtonSub");
            return;
        }
    }
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/ButtonMain"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/ButtonMain"
        >
    </Button>
    <TextView
        android:id="@+id/TextReturnValue"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
    </TextView>
    <Button
        android:id="@+id/ButtonSub"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/ButtonSub"
        >
    </Button>
    <TextView
        android:id="@+id/TextResult"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
    </TextView>
</LinearLayout>

0 件のコメント:

コメントを投稿