2

我有一个选择ListView,每一行都有选择器。选择器行为如下。请注意,ListView本身也放置在白色上LinearLayout

  1. 在正常状态下,该行将为白色。
  2. 在“选择过程”中,我想让系统处理着色。所以,我将它们标记为透明。
  3. 选择行项目时,我希望突出显示颜色为蓝色。
  4. 当我从这一行选择到那一行时,我想有一些动画,所以我有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不是我想要的。

4

0 回答 0