我有一个选择ListView
,每一行都有选择器。选择器行为如下。请注意,ListView
本身也放置在白色上LinearLayout
。
- 在正常状态下,该行将为白色。
- 在“选择过程”中,我想让系统处理着色。所以,我将它们标记为透明。
- 选择行项目时,我希望突出显示颜色为蓝色。
- 当我从这一行选择到那一行时,我想有一些动画,所以我有
android:exitFadeDuration
这是我的选择器的样子
<selector android:exitFadeDuration="@android:integer/config_mediumAnimTime"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/blue" />
<!-- http://stackoverflow.com/questions/2217753/changing-background-color-of-listview-items-on-android -->
<item android:state_pressed="true" android:drawable="@android:color/transparent" /> <!-- pressed -->
<item android:state_focused="true" android:drawable="@android:color/transparent" /> <!-- focused -->
<item android:state_selected="true" android:drawable="@android:color/transparent" /> <!-- selected -->
<item android:drawable="@drawable/white" />
</selector>
当我通过 Java 代码执行选择时,褪色动画效果看起来很完美
// Highlighting.
listView.performItemClick(getListView().getAdapter().getView(index, null, null), index, index);
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(index);
}
}
但是,如果我通过单击ListView
显式执行手动选择,我可以看到轻微闪烁的效果!
我可以知道为什么会这样吗?有什么办法可以避免这种情况吗?我意识到即使我将透明状态更改为
<item android:state_pressed="true" android:drawable="@drawable/blue" /> <!-- pressed -->
<item android:state_focused="true" android:drawable="@drawable/blue" /> <!-- focused -->
<item android:state_selected="true" android:drawable="@drawable/blue" /> <!-- selected -->
闪烁仍然发生。请注意,如果没有 ,则不会出现闪烁效果android:exitFadeDuration
。但是,删除android:exitFadeDuration
不是我想要的。