Мой вопрос прост, где событие onUp при реализации GestureListener?
У меня есть много событий на gesturedetector и не может просто потреблять событие onUp слушателя, потому что одно из событий - это onSingleTapConfirmed, которому это нужно.
Мой вопрос прост, где событие onUp при реализации GestureListener?
У меня есть много событий на gesturedetector и не может просто потреблять событие onUp слушателя, потому что одно из событий - это onSingleTapConfirmed, которому это нужно.
Попробуйте использовать onFling()
. Кажется, это странное имя, но для меня оно работает, поскольку метод onUp()
будет логически работать. Или попробуйте этот метод...
@Override
public boolean onTouchEvent(MotionEvent me) {
Log.v("ADAM", "ontouch: " + me.getAction());
if(me.getAction() == 0){
Log.v("ADAM", "Down");
}
else if (me.getAction() == 1) {
Log.v("ADAM", "Up");
}
else if (me.getAction() == 2) {
Log.v("ADAM", "Scroll");
}
boolean detectedUp = event.getAction() == MotionEvent.ACTION_UP;
if (!mGestureDetector.onTouchEvent(event) && detectedUp) {
return onUp(event);
}
return true;
}
Я зафиксировал его, прочитав Action event
, прежде чем передать его в GestureListener
img.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_UP
&& !getDocument().isScaled())
img.notifyUp();
return gestures.onTouchEvent(arg1);
}
});
Вы вернулись из других событий, которые вы потребляете в своем GestureDetector.OnGestureListener? У меня была эта проблема, и оказалось, что если вы вернете false, система предполагает, что вы не заинтересованы и перестаете передавать вам события, поэтому вы пропустите вверх!
Другие ответы могут решить вопрос, может быть, они работают хорошо, но я не думаю, что это хорошие решения.
Потому что мы должны иметь дело с событием в одном moudle, чтобы мы могли быть esaier для поддержки или расширения кода.
(Кстати, не используйте onFilng()
, если ваш палец медленно движется по экрану, onFilng()
не будет работать)
Итак, мое решение переписывает GestureDetector:
public class ModifyGestureDetector extends GestureDetector {
MyGestureListener myGestureListener;
public ModifyGestureDetector(Context context, OnGestureListener listener) {
super(context, listener);
init(listener);
}
void init(OnGestureListener listener){
if (listener instanceof MyGestureListener){
myGestureListener = (MyGestureListener) listener;
}
}
//u can write something more complex as long as u need
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_UP
&& myGestureListener != null){
myGestureListener.onUp(ev);
}
return super.onTouchEvent(ev);
}
public interface MyGestureListener{
public void onUp(MotionEvent ev);
}
}
И слушатель:
public class MyGestureListener extends GestureDetector.SimpleOnGestureListener
implements ModifyGestureDetector.MyGestureListener {
@Override
public void onUp(MotionEvent ev) {
//do what u want
}
}
:)