В моем приложении я пытаюсь получить событие броска на представлении (a ScrollView
быть точным, но попробованный LinearLayout
также).
Путем установки точек останова I видят что MotionEvents
произойдите правильно до такой степени, когда onFling()
должен стрелять.
Поток события следующие:
onTouchEvent
OnGestureListener's onDown
OnGestureListener's onShowPress
OnGestureListener's onLongPress
Я в замешательстве о том, как продолжить пытаться отладить что-то как этот, и поиск Google не поднимается очень. Какие-либо указатели?
Я также присоединяю соответствующее представление, которое должно обработать жесты:
import android.content.Context;
import android.content.Intent;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class GestureScrollView extends ScrollView {
private static int MAJOR_MOVE = 60;
private GestureDetector gd;
public GestureScrollView(final Context context) {
super(context);
gd = new GestureDetector(context,
new GestureDetector.OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int dx = (int) (e2.getX() - e1.getX());
if (Math.abs(dx) > MAJOR_MOVE
&& Math.abs(velocityX) > Math.abs(velocityY)) {
if (velocityX < 0) {
Intent intent = new Intent(context, Main.class);
context.startActivity(intent);
}
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
}
Возьмите MotionEvent из Activity, а не из вашего View. Когда ваш детектор жестов основан на MotionEvent, исходящем от Activity, вы получите событие onFling. Итак, вам нужно переместить onTouchEvent () из GestureScrollView в класс Activity. С уважением!