2013-08-22 4 views
15

J'ai listview avec du texte. Je veux montrer des images sur l'action de balayage (presque comme dans l'application de gmail). Par exemple, si je balaye de gauche à droite - mon élément de liste se déplace vers la droite, et l'image glisse de la gauche. Mon élément de liste ne peut pas bouger plus que la largeur de l'image. Après l'arrêt du balayage, l'élément de liste se déplace vers la position de départ. Comment pourrais-je faire une telle chose? exampleAndroid listview, glisser vers l'action

+0

Avez-vous jamais ce résoudre? Je cherche à faire quelque chose de similaire. – egfconnor

+0

Non, je n'ai pas trouvé d'exemple bien documenté – BoredT

+0

J'ai fini par créer ma propre solution. Je serai ouvert sourcing bientôt et répondra après. C'est un peu différent mais devrait être très adaptable à votre utilisation. Je pourrais même être en mesure de le rouler en incorporant votre cas d'utilisation. – egfconnor

Répondre

1

Vous pouvez utiliser l'événement onFling() de gesturedetector. il vous donnera les points de mouvement et les points de vélocité en utilisant ce que vous pouvez identifier le geste et peut charger une vue en utilisant des animations comme de gauche à droite et de droite à gauche.

1

Je n'ai pas trouvé de bibliothèque qui fait exactement cela, mais ce n'est pas difficile de le faire par vous-même. Comme Nick a souligné jeter un oeil à android-swipetodismiss, regardez SwipeDismissListViewTouchListener.java. D'abord, vous devez créer un View personnalisé pour l'enfant de ListView. Vous aurez besoin d'un ImageView qui est chevauché par un autre View qui contient le texte.

Puis, vous ajoutez un écouteur onTouch() à votre ListView. Sur MotionEvent.ACTION_DOWN (lorsque vous démarrez le geste), vous prenez les coordonnées de contact et de calculer quel enfant dans le ListView que vous touchez, par exemple:

 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; 
      } 
     } 

Sur MotionEvent.ACTION_MOVE vous mesurer la différence de coordonnées X entre le point touché dans MotionEvent.ACTION_DOWN et la coordonnée actuelle:

float deltaX = motionEvent.getRawX() - mDownX; 

vous avez donc ensuite traduire le View qui contient le texte de sorte que le ImageView est révélé:

mDownView.setTranslationX(deltaX); 

Lorsque vous levez le doigt, il vous suffit de régler mDownView .setTranslationX(0) et l'image est recouverte. Ceci est juste un guide, il y a quelques détails qui ne sont pas couverts, mais vous devriez être en mesure de commencer avec cela.

2

consultez this.

Vous pouvez voir le balayage de la liste vers la droite pour afficher les vues.

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> 
Questions connexes