Basierend auf diversen Tutorials und Beispielen habe ich mir das hier zur Erkennung einer Scroll-Geste zusammengebaut:
Code
public class MapView extends View implements GestureDetector.OnGestureListener
{
private float drawXOffs=0.0f,drawYOffs=0.0f,rawX,rawY;
private GestureDetector gesturedetector = null;
public MapView(OWMapAtAndroid ctx)
{
super(ctx);
...
gesturedetector = new GestureDetector(this);
}
public boolean onTouchEvent(MotionEvent event)
{
return gesturedetector.onTouchEvent(event);
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY)
{
drawXOffs+=distanceX;
drawYOffs+=distanceY;
return false;
}
Alles anzeigen
Dummerweise wird onScroll() jedoch niemals aufgerufen, egal was ich auf dem Touch mache.
Alternativ habe ich dann versucht, die Scrolldistanz selber zu ermitteln:
Code
public void onShowPress(MotionEvent e)
{
float x,y;
x=e.getRawX();
y=e.getRawY();
drawXOffs+=rawX-x;
drawYOffs+=rawY-y;
rawX=x;
rawY=y;
this.invalidate();
}
public boolean onDown(MotionEvent e)
{
rawX=e.getRawX();
rawY=e.getRawY();
return false;
}
Alles anzeigen
Diese Methoden werden aufgerufen, allerdings liefern getRawX/Y() immer die gleichen Koordinaten zurück - und lassen sich also nicht verwenden.
Mein View ist Child eines FrameLayout. Was mache ich falsch?