将RippleDrawable和StateListDrawable的效果添加到RecyclerView

时间:2014-12-05 17:55:26

标签: android android-5.0-lollipop android-recyclerview rippledrawable

我正在开发一款在大型设备上使用双窗格布局的应用,类似于详细的here。布局摘要;一个窗格包含一个选项列表,而另一个窗格显示从另一个窗格中选择的选项的详细信息。

现在当选择一个选项时,会出现选择其他元素(按钮,复选框等)时出现的涟漪效应,但在动画完成后,元素会返回到之前的颜色。我想在动画完成后保留涟漪的亮点,我无法弄清楚如何实现这一点。

这就是我的涟漪背景目前的样子。 focus选择器没有做任何事情 - 无法弄清楚如何实际给予元素焦点。我也尝试使用selected选择器,但这会立即发生,超越涟漪。

<?xml version="1.0" encoding="utf-8"?>
    <ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorAccent">
    <item android:id="@android:id/mask"
        android:drawable="@android:color/black" />
    <item>
        <selector>
            <item android:state_focused="true"
                android:drawable="@color/accent" />
        </selector>
    </item>
</ripple>

要重新进行迭代,我的问题是这样的:是否有可能同时出现涟漪效应,然后是突出显示的选择,如果是这样的话?

2 个答案:

答案 0 :(得分:1)

这为我选择时保留了涟漪动画。

使用你的波纹可用:

<?xml version="1.0" encoding="utf-8"?>
    <item>
        <selector>
            <item android:state_selected="true"
                  android:drawable="@color/selected_color" />
            <item android:drawable="@color/normal_color" />
        </selector>
    </item>
</ripple>

在适配器上,调用setHasStableIds(true)并实施getItemId以返回代表行的唯一值。

选择项目后,请执行以下操作:

ViewHolder oldViewHolder = (ViewHolder) recyclerView.findViewHolderForItemId(oldItemId);
oldViewHolder.itemView.setSelected(false);

ViewHolder newViewHolder = (ViewHolder) recyclerView.findViewHolderForItemId(newItemId);
newViewHolder.itemView.setSelected(true);

同样在您的适配器中:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

    ...

    viewHolder.itemView.setSelected(isSelected);

    ...
}

另一方面,聚焦选择器用于突出显示使用电视机和某些旧款手机等设备的设备上的导航。

答案 1 :(得分:0)

我也很努力。 我最后用<layer-list/>

做了

您可以在回答与此类似的问题时看到我的解决方案:https://stackoverflow.com/a/31335539/844206