利用者が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 件のコメント:
コメントを投稿