Wie ich im Titel erwähnt, hat App auch eine ScrollView
und eine GestureDetector
. Außerhalb von ScrollViews Berührungsereignissen behandelt der GestureDetector Swipe-Aktionen wie von links nach rechts und von rechts nach links. Sie arbeiten alle gut.Verwendung von GestureLibrary mit ScrollView
Jetzt möchte ich eine GestureLibrary
-I bedeuten roh- zu Aktivität hinzufügen. Ich habe verschiedene Quellen gesucht und irgendwie richtig hinzugefügt. Einfach suchen Layout wie folgt aus:
<android.gesture.GestureOverlayView
android:id="@+id/gOverlay"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ScrollView
android:id="@+id/content_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none">
</ScrollView>
<!-- Other views -->
</android.gesture.GestureOverlayView>
Es zeichnen, wie ich (die gelbe Linie) wollte, aber es auslösenden keine Methoden. Hier ist, wie ich implementiert OnGesturePerformedListener
:
/*
* Gestures
*/
gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLibrary.load()) { finish(); }
GestureOverlayView gestureOverlayView = (GestureOverlayView) findViewById(R.id.gOverlay);
gestureOverlayView.addOnGesturePerformedListener(gestureListener);
Und hier ist gestureListener
:
private OnGesturePerformedListener gestureListener = new OnGesturePerformedListener() {
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = gLibrary.recognize(gesture);
if (predictions.size() > 1) {
for(Prediction prediction: predictions){
Log.d("Test", "Looking for gestures");
}
}
}
};
Das ist alles. An der Wand habe ich diesen Quellcode mit verschiedenen Activity ausprobiert, der keine ScrollView hat und gut funktioniert.
Schließlich, ich bin nicht sicher, dass es über GestureDetector, so das ist, wie App-Detektor:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (detector != null) {
if (detector.onTouchEvent(ev)) {
return true;
}
}
return super.dispatchTouchEvent(ev);
}
Und mein SwipeDetector
:
private class SwipeDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public boolean onFling(android.view.MotionEvent e1, android.view.MotionEvent e2, float velocityX, float velocityY) {
if(Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; }
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { return false; }
if(e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { filterButton.performClick();return true; }
return false;
}
}
Was mit meinem Ansatz falsch?
Was ist das "Detektor"? ist es SwipeDetector Objekt? –
@RahulHawge, der "Detektor" ist das GestureDetector-Objekt. – strizzwald