OnTouch в стиле OnClick - PullRequest
       20

OnTouch в стиле OnClick

0 голосов
/ 27 марта 2012

Я пытаюсь внедрить 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

Iхотел бы сделать выше, но с помощью 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 Ответ

1 голос
/ 27 марта 2012

Вам не нужно, чтобы ваша активность расширяла 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
    }
});
...