2014-11-16 2 views
9

Ich habe gegoogelt, um festzustellen, wie ich eine Klick-Animation für Elemente in einem RecycleView bekomme, etwas wie "Klick/Touch-Feedback".So erstellen Sie eine Klick-Animation für Objekte in einem RecycleView

Ich kann meine Artikel in der Ansicht sehen, aber es gibt keine echte Reaktion darauf, wenn ich auf sie drücke/klicke. Ich habe eine verkleinerte Version dieses Projekts:

https://github.com/writtmeyer/recyclerviewdemo/tree/master/app/src/main/java/com/grokkingandroid/samplesapp/samples/recyclerviewdemo

Wer weiß, wie für Elemente in einem RecycleView Klick-Animationen zu bekommen?

Antwort

33

Dies ist sehr einfach zu tun. In der Layoutdatei der Ansicht, die Sie für jede Zeile Ihres RecycleView auffüllen, legen Sie fest, dass die Ansicht der obersten Ebene sowohl anklickbar als auch fokussierbar sein soll. Legen Sie dann den Hintergrund dieser Ansicht auf ?android:attr/selectableItemBackground fest. Basierend auf dem von Ihnen geposteten GitHub-Projekt sieht es so aus, als ob die Ansicht, die Sie für jede Zeile aufblasen, item_demo_01.xml ist. Dieses Layout sieht nun ungefähr so ​​aus:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container_list_item" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:focusable="true" 
    android:background="?android:attr/selectableItemBackground"> 

    <include layout="@layout/common_item_layout" /> 

</RelativeLayout> 
+0

Danke Nathan, ich werde das so schnell wie möglich untersuchen. Das scheint weniger umständlich und aufgebläht zu sein, also probier ich das mal aus und lasse es kurz wissen =) – Ted

+1

Funktioniert wie ein Zauber =) – Ted

+0

@Ted froh das zu hören! –

1

Sie können dies mit Ihrem Viewholder in Ihrer RecyclerAdapter-Klasse erreichen.

//this goes in your recyclerView adapter.... 
    /** 
    * View holder for workouts 
    */ 
    public static class MyViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public TextView mTitleView; 
     public TextView mTView1; 
     public View homeView; 

     public MyViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      this.homeView = itemLayoutView; 
      this.mTitleView = (TextView) itemLayoutView.findViewById(R.id.workoutItemTitleText); 
      this.mTView1 = (TextView) itemLayoutView.findViewById(R.id.workoutItemWorkoutSets); 
      homeView.setOnClickListener(new ON) 
     } 
    } 

    //other code..... 

    @Override 
    public void onBindViewHolder(WorkoutViewHolder viewHolder, int position) { 
     viewHolder.mTView1.setText(""); 
     viewHolder.mTitleView.setText(""); 
     //pass the position to the view in the onclick listener 
     viewHolder.homeView.setId(position); 
     viewHolder.homeView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //this list item has been clicked, do something. maybe use an interface or something to notify your activity/fragment. 
      } 
     }); 
    } 

//the rest of your code..... 

Im onBindViewHolder Methode können Sie Ihre Animation Logik für diese Ansicht und Pass, die auf Ihre Aktivität oder ein Fragment Onclick implementieren. Erstellen Sie einfach eine benutzerdefinierte Schnittstelle für Ihren Recyclerview-Adapter und erstellen Sie eine Methode wie setMyOnItemClickListener(new MyOnItemClickListener). Wenn ein Objekt angeklickt wird, benachrichtigen Sie Ihre benutzerdefinierte Oberfläche und führen Sie eine Aktion mit dem Klick aus.

+0

Thx. Aber ich sehe immer noch nicht, wie es geht. Und ist das wirklich der Weg, es zu tun? Es scheint sehr umständlich zu sein, dass die Idee mit Material Design darin liegt, dass es einfacher und ein natürlicher Teil der Entwicklung sein sollte, aber dieser Ansatz scheint ein Hack zu sein? Oder liege ich hier falsch? – Ted

+0

Es ist eine Art von Hack, aber es ist eine der wenigen Möglichkeiten, dies zu tun. Die Basis RecyclerAdapter-Klasse hat keine "onItemClick" -Methode wie Listenansichten und Rasteransichten. Eine Recycler-Ansicht soll super flexibel sein, und weil das der Fall ist, sind viele Dinge über sie und ihren Adapter reine Knochen, damit Sie tun können, was Sie als Entwickler wollen. Leider ist es jetzt sehr schwierig, zu anderen Layout-Typen zu wechseln, aber das wird sich hoffentlich in Zukunft ändern. –

+0

Thx für den Eingang Paul =) – Ted