2013-08-22 15 views
15

Ich habe Listview mit etwas Text. Ich möchte Bilder auf Swipe-Aktion anzeigen (fast wie in Google Mail-App). Zum Beispiel, wenn ich von links nach rechts wische - mein Listenelement bewegt sich nach rechts und das Bild gleitet von links. Mein Listenelement kann nicht mehr als die Bildbreite nach rechts verschoben werden. Nach dem Wischen stoppt der Listeneintrag in die Startposition. Wie könnte ich so etwas machen? exampleAndroid Listview, swipe zu Aktion

+0

Haben Sie jemals dieses Problem lösen? Ich möchte etwas ähnliches machen. – egfconnor

+0

Nein, ich habe kein gut dokumentiertes Beispiel gefunden – BoredT

+0

Ich habe meine eigene Lösung erstellt. Ich werde es bald öffnen und werde danach antworten. Es ist ein wenig anders, aber sollte sehr anpassungsfähig zu Ihrer Verwendung sein. Ich könnte es sogar in die Verwendung Ihres Anwendungsfalls einbringen. – egfconnor

Antwort

1

können Sie OnFling() Ereignis Gestikdetektor verwenden. es gibt Ihnen die motionevent Punkte und Anschlagpunkte, mit denen Sie die Geste identifizieren können und eine Ansicht laden können, indem Sie Animationen von links nach rechts und von rechts nach links verwenden.

1

Ich konnte keine Bibliothek finden, die genau das tut, aber es ist nicht schwer, es selbst zu machen. Wie Nick darauf hingewiesen, werfen Sie einen Blick auf android-swipetodismiss, siehe SwipeDismissListViewTouchListener.java.

Zuerst müssen Sie eine benutzerdefinierte View für Sie ListView 's Kind erstellen. Sie benötigen einen ImageView, der von einem anderen View überlappt wird, der den Text enthält.

Dann fügen Sie einen onTouch() Listener zu Ihrem ListView hinzu. Auf MotionEvent.ACTION_DOWN (wenn Sie die Geste beginnen) Sie nehmen die Berührungskoordinaten und berechnen, welches Kind in der ListView Sie berühren, zum Beispiel:

 int[] listViewCoords = new int[2]; 
     mListView.getLocationOnScreen(listViewCoords); 
     int x = (int) motionEvent.getRawX() - listViewCoords[0]; 
     int y = (int) motionEvent.getRawY() - listViewCoords[1]; 
     View child; 
     for (int i = 0; i < childCount; i++) { 
      child = mListView.getChildAt(i); 
      child.getHitRect(rect); 
      if (rect.contains(x, y)) { 
       mDownView = child; 
       break; 
      } 
     } 

auf MotionEvent.ACTION_MOVE Sie den Unterschied in der X messen Koordinaten zwischen dem Punkt, den Sie berührt in MotionEvent.ACTION_DOWN und die aktuelle Koordinate:

float deltaX = motionEvent.getRawX() - mDownX; 

also dann haben Sie die View übersetzen, die den Text enthält, so dass die ImageView enthüllt:

mDownView.setTranslationX(deltaX); 

Wenn Sie Ihren Finger heben, setzen Sie einfach mDownView .setTranslationX(0) und das Bild wird wieder abgedeckt. Dies ist nur ein Leitfaden, es gibt einige Details, die nicht abgedeckt sind, aber Sie sollten damit beginnen können.

2

check out this.

Dort können Sie die Listview Swipe nach rechts sehen, um die Ansichten anzuzeigen.

Snap:

enter image description here

main_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:swipe="http://schemas.android.com/apk/res-auto" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <com.fortysevendeg.swipelistview.SwipeListView 
      android:id="@+id/example_swipe_lv_list" 
      android:listSelector="#00000000" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      swipe:swipeFrontView="@+id/front" 
      swipe:swipeBackView="@+id/back" 
      swipe:swipeDrawableChecked="@drawable/choice_selected" 
      swipe:swipeDrawableUnchecked="@drawable/choice_unselected" 
      swipe:swipeCloseAllItemsWhenMoveList="true" 
      swipe:swipeMode="both" 
      /> 

</LinearLayout> 
Verwandte Themen