Update: Siehe Bounty für erweiterte Frage.Gestenzuhörer onFling nicht aktiv
Ich habe eine GestureDetector
Setup auf einem ListView
. Das ListView ist ein ganzes Fragment, das von der Seite des Fensters kommt und teilweise ein anderes Fragment überlagert. Ich möchte dem Benutzer die Möglichkeit geben, es zu schließen (d. H. Wunderlist ist ein großartiges Beispiel für diese Funktion auf der rechten Seite).
Hier ist mein Setup:
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
listView.setOnTouchListener(gestureListener);
Der Zuhörer selbst:
public class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 180;
private static final int SWIPE_THRESHOLD_VELOCITY = 50;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
FragmentManager fma = getActivity()
.getSupportFragmentManager();
FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
SherlockListFragment mFrag = new RateReviewFragment();
t.add(R.id.main_frag, mFrag);
t.setCustomAnimations(R.anim.animation_enter,
R.anim.animation_leave);
t.remove(mFrag);
t.commit();
}
return false;
} catch (Exception e) {
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// edited out; this opens up a context menu
}
}
Manchmal, wenn die ListView
scrollt nach unten (oder Liste Scrollen mit Klicks auf einer Listenzeile unterbrochen) hört die GestureListener
einfach auf ... zuhören. Swiping wird nicht funktionieren. Sie müssen nach oben scrollen, um es wieder zum Laufen zu bringen.
Wenn mir jemand helfen kann, diese Probleme zu isolieren, wäre ich dankbar!
UPDATE: Nur eine Frage bleibt, "der Zuhörer hält hören"
UPDATE TWO: Ich habe heraus kann dachte, was ist der Grund dafür; Ich weiß nicht, die Lösung:
Ich habe etwas nach dem Protokollieren meiner Aktionen gefunden; Je niedriger ich in der Liste bin (und je mehr ich damit interagiere), die Messungen sind nicht konsistent. Zum Beispiel, wenn ich meinen Finger einen Zentimeter nach links und rechts bewege - ganz oben in der Liste, wird es sagen, dass ich zum Beispiel 200 Pixel bewegt habe. Aber wenn ich das oben genannte Problem habe, ist es viel niedriger, vielleicht 50, für die 1 Zentimeter Entfernung. Das Fenster schließt also nicht, weil es meine if
Bedingungen nicht erfüllt.
Sidenote: Ich habe mehr als einmal gesagt, das Problem ist, wenn "mit der Liste interagieren". Das heißt: Wenn ich schnell von oben nach unten blättern kann; kein Problem; Aber wenn ich mich langsam nach unten arbeite, vielleicht auf den Bildschirm tippe, ein- und ausbleiche, auf die Knöpfe auf der listView
klicke, von denen einige eine neue Aktivität öffnen (und dann zur selben Position zurückkehren), ist das "interagierend" mit " .
Wenn Sie für die neue gmail App Art Schublade suchen von der linken Seite möchten Sie vielleicht einen Blick darauf werfen - http://developer.android.com/training/implementing-navigation/nav-drawer.html – Varun
@Varun das ist nicht diese Art von Slider für die Navigation. Ich habe das eigentlich schon auf der linken Seite. Das ist eine rechte Seite, um Inhalte zu zeigen. – KickingLettuce