マインドストームロボットをリモートコントロールするために使用するクラスにonTouchを実装しようとしています。まだやるべきことがたくさんありますが、今のところ、onClickを使用するダイレクトコントロールを整理しようとしています。5つのボタン、以下のコードのような5つのインスタンス化。これは、ロボットが移動するための命令を含む5つのメソッドの1つを呼び出します。
編集:アクティビティには5つのボタンがあり、それぞれが何かを行います。元のクラスは、以下に示すようにonClickListenerを使用しました。ここでは、実行する実際のコードを持つvoidメソッドを呼び出すOnCreateメソッド内でインスタンス化されます。
リモートをより良くするため、代わりにonTouchを使用したかったのです。しかし、複数のボタンで機能させるのに問題がありました。
btn1 = (Button) findViewById(R.id.btn1);// instantiates a button called
// btn1 one from the xml
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
driveFore();//move forward
}// calls the method
});// end of method
これは元のonClickであり、onCreateの外部のメソッドを呼び出します。
private void driveFore() {
// TODO Auto-generated method stub
Motor.A.forward();
Motor.B.forward();
}//Move forward
上記を実行したいのですが、onTouchを使用します。そのままボタンをクリックすると、別のボタンがクリックされるまでモーターが動き続けるので、ボタンを押している間だけ動くので、onTouchの方がいいと思いました。
そしてこれはonTouchの変種です
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnTouchListener(this);
どちらがリッスンします
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Motor.A.forward();
Motor.B.forward();
break;
case MotionEvent.ACTION_UP:{
Motor.A.flt();
Motor.B.flt();
}
break;
}
return true;
}
上記のコードは機能しますが、ボタンが1つだけです。上記を5つものボタンに適用するにはどうすればよいでしょうか。
編集:提案されたように、私はこれらの2つの方法を使用してみました:
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Motor.A.forward();
Motor.B.forward();
break;
case MotionEvent.ACTION_UP:
Motor.A.flt();
Motor.B.flt();
}
return true;
}
});
btn2 = (Button) findViewById(R.id.btn2);
btn2.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Motor.A.forward();
Motor.B.forward();
break;
case MotionEvent.ACTION_UP:
Motor.A.flt();
Motor.B.flt();
}
return true;
}
});
正常に動作します。みんなありがとう。