如何从RecyclerView获得触摸反馈?

时间:2015-01-23 00:10:03

标签: java android android-listview android-recyclerview recycler-adapter

我实现了一个ReceylerView,我无法弄清楚如何获得触摸反馈(来自它的连锁反应)。

这是我为onClickListener所做的:

holder.itemView.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            //start Intent
        }

    });

我添加了可点击的和专注于我的XML。这就是回收者视图膨胀的原因:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:padding="4dp" >

2 个答案:

答案 0 :(得分:28)

你必须设置一个可绘制的波纹作为背景:

android:background="@drawable/ripple"

<强> ripple.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ffa0a0a0"/>

您可能需要屏蔽drawable:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ffa0a0a0">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#ffa0a0a0"/>
        </shape>
    </item>
</ripple>

这会在触摸时产生简单的灰色波纹(如果您需要更多说明,这里是guide)。

在SDK版本21(Lollipop)中添加了RippleDrawable。在pre-lollipop上使用Ripple drawable会使应用程序崩溃。在pre-lollipop设备上使用简单的选择器或使用重新创建效果的库。 (GitHub

更新:您可以使用以下代码轻松获得涟漪效果:

android:background="?attr/selectableItemBackground"

或者如果你不想要矩形面具:

android:background="?attr/selectableItemBackgroundBorderless"

这与棒棒糖前设备兼容,我们将选择一个简单的选择器。我相信这会在黑暗主题的应用程序中产生轻微的涟漪,反之亦然,所以如果你想要一个自定义的彩色波纹,你仍然需要创建一个可绘制的波纹。

答案 1 :(得分:2)

除了@Longi的回答:如果你想让RecyclerViews的物品有自己的背景,同时又有涟漪效果,你可以按照下面的例子中所示: 的 recycler_view_item.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/recyclerview_item_background">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="?attr/selectableItemBackgroundBorderless">
       ...
    </LinearLayout>
</LinearLayout>

在这个例子中, @ drawable / recyclerview_item_background 是一个九补丁png,但你可以在这里使用任何背景。

在我使用 android:background =“?attr / selectableItemBackground”的情况下,RecyclerView项目的根线性布局确实具有涟漪效果,但子线性布局的背景重叠,因此隐藏了涟漪效应。