如何为RecycleView中的项创建单击动画

时间:2014-11-16 23:31:50

标签: android android-animation

我一直在谷歌搜索确定如何获取RecycleView中的项目的点击动画,类似于"点击/触摸反馈"。

我可以在视图中看到我的项目,但是当我按下/点击它们时没有真正的反应。我有一个缩小版本的项目:

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

有谁知道如何获取RecycleView中的项目的点击动画?

3 个答案:

答案 0 :(得分:39)

这很容易做到。在您为RecycleView的每一行充气的视图的布局文件中,将顶级视图设置为可点击且可对焦。然后,将该视图的背景设置为?android:attr/selectableItemBackground。根据您发布的GitHub项目,看起来您为每行充气的视图为item_demo_01.xml。所以,那个布局现在看起来像这样:

<?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>

答案 1 :(得分:1)

您可以使用RecyclerAdapter类中的viewholder完成此操作。

//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.....

在onBindViewHolder方法中,您可以为该视图实现动画逻辑,并将该onclick传递给您的活动或片段。只需为您的recyclerview适配器创建一个自定义界面,并创建一个类似setMyOnItemClickListener(new MyOnItemClickListener)的方法。然后,当单击某个项目时,通知您的自定义界面并通过单击执行某些操作。

答案 2 :(得分:0)

对于那些潜伏在未来的人,我必须按照以下方式修改Nathan Walter的答案,以便让我的事情发挥作用:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"

foreground 而不是 background 。因为在我的情况下,在LinearLayout中有一个textview,有自己的不透明背景)