Я пытаюсь реализовать onTouch в своем классе, используемом для дистанционного управления роботом-умом. Мне еще предстоит сделать много работы, но пока я пытаюсь убрать прямой контроль, который использует onClick. 5 кнопок, 5 экземпляров, таких как код ниже, который вызывает один из 5 методов, содержащих инструкции для перемещения робота.OnTouch в стиле OnClick
EDIT: Активность имеет 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 кнопок.
EDIT: Как предложил я попытался использовать эти два метода:
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 кнопку? Вы пытались настроить слушателей более чем на один? – keyser
Слушатель onTouch установлен для btn1. У меня возникла проблема поместить общедоступный логический метод ontouch в метод, который можно вызвать, как это было бы с onClick – TroothHertz
. Я все еще не полностью понимаю проблему, sry. – keyser