0

我正在尝试在用于远程控制头脑风暴机器人的课堂上实现 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;
        }
    });

工作得很好。多谢你们。

4

1 回答 1

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
    }
});
于 2012-03-26T20:52:56.277 回答