In meiner App versuche ich, ein Fling-Ereignis in einer Ansicht zu erfassen (ein ScrollView
um genau zu sein, aber versucht mit LinearLayout
auch).
Durch das Setzen von Haltepunkten kann ich sehen, dass die MotionEvents
korrekt ablaufen, bis zu dem Punkt, an dem die onFling()
schießen sollte.
Der Ereignisablauf ist wie folgt:
- Die Aussicht ist
onTouchEvent
- El
OnGestureListener's onDown
- El
OnGestureListener's onShowPress
- El
OnGestureListener's onLongPress
Ich bin ratlos, wie ich weiter vorgehen soll, um so etwas zu debuggen, und die Google-Suche ergibt nicht viel. Irgendwelche Hinweise?
Ich füge auch die entsprechende Ansicht bei, die die Gesten verarbeiten soll:
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);
}
}