我正在尝试在我的类中实现onTouch,用于远程控制一个mindstorms机器人。我还有很多工作要做,但是现在我正在尝试整理使用onClick的直接控制。 5个按钮,5个实例,如下面的代码,它调用5个方法中的一个,包含机器人移动的指令。
编辑: 一个Activity有5个按钮,每个按钮都有效。原始类使用onClickListener,如下所示,它们将在OnCreate方法中实例化,调用一个具有要执行的实际代码的void方法。
我想使用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个按钮。
编辑: 正如我所建议的那样,我尝试过使用这两种方法:
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;
}
});
工作得很好。谢谢你们。
答案 0 :(得分:1)
您不需要让您的Activity扩展OnTouchListener。您可以使用匿名内部类做同样的事情。像这样:
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();
}
}
});
btn2.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
// Something else here
}
});