我正在尝试在用于远程控制头脑风暴机器人的课堂上实现 onTouch。我还有很多工作要做,但现在我正在尝试整理使用 onClick 的直接控件。5 个按钮,5 个实例,如下面的代码,它调用 5 个包含机器人移动指令的方法之一。
编辑:一个活动有 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;
}
});
工作得很好。多谢你们。