5

我正在开发一个在较大设备上使用双窗格布局的应用程序,类似于此处详述的内容。布局摘要;一个窗格包含选项列表,而另一个将显示有关从另一个窗格中选择的选项的详细信息。

Right now when an option is selected there is the ripple effect that's seen when selecting other elements (buttons, check boxes, etc) but after the animation completes the element returns to it's previous color. 我想在动画完成后保留涟漪中的亮点,但我无法弄清楚如何实现这一点。

这就是我的波纹背景目前的样子。选择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>

重申一下,我的问题是:是否有可能同时出现涟漪效应和突出显示的选择,如果可以,如何?

4

2 回答 2

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

    ...
}

附带说明一下,焦点选择器用于突出显示使用电视和一些旧手机等使用 d-pad 的设备上的导航。

于 2014-12-17T21:43:15.760 回答
0

我也为此苦苦挣扎。我最终做了一个<layer-list/>

您可以在与您的问题非常相似的答案中看到我的解决方案:https ://stackoverflow.com/a/31335539/844206

于 2015-07-10T11:13:44.603 回答