OnClick风格的OnTouch

时间:2012-03-26 20:43:53

标签: android lejos-nxj

我正在尝试在我的类中实现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;
        }
    });

工作得很好。谢谢你们。

1 个答案:

答案 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
    }
});