gpt4 book ai didi

android - 将 RippleDrawable 和 StateListDrawable 的效果添加到 RecyclerView

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:22 25 4
gpt4 key购买 nike

我正在开发一款在大型设备上使用双 Pane 布局的应用程序,类似于详细说明 here .布局概要;一个 Pane 包含选项列表,而另一个 Pane 将显示有关从另一个 Pane 中选择的选项的详细信息。

现在选择选项时,选择其他元素(按钮,复选框等)时会看到链式 react ,但是在动画完成元素后,该元素返回到先前的颜色。我想在动画完成后保留涟漪中的高光,但我不知道如何实现这一点。

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

重申一下,我的问题是:是否有可能同时产生涟漪效应和突出显示的选择,如果是的话,怎么做?

最佳答案

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

使用你的 ripple drawable:

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

...
}

附带说明一下,焦点选择器用于在使用方向键的设备(如电视和一些旧手机)上突出显示导航。

关于android - 将 RippleDrawable 和 StateListDrawable 的效果添加到 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com