使用exitFadeDuration会导致列表视图自定义选择器闪烁

时间:2013-06-01 02:34:49

标签: android

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

  1. 在正常状态下,该行将为白色。
  2. 在“选择过程”期间,我想让系统处理着色。所以,我把它们标记为透明。
  3. 当选择行项目时,我希望高亮颜色为蓝色。
  4. 当我从这一行选择那一行时,我想要一些动画,所以我有android:exitFadeDuration
  5. 以下是我的选择器的外观

    <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不是我想要的。

0 个答案:

没有答案