涟漪效应有时不会出现

时间:2014-12-13 07:26:59

标签: android android-listview rippledrawable

我定义了一个可绘制的波纹,并将其设置为listview项目视图背景的背景。它几乎可以正常工作,但有时涟漪效应不会出现在印刷机上。

这是波纹可绘制代码:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item>
        <selector>
            <item android:state_activated="true">
                <shape><solid android:color="?android:attr/colorButtonNormal"/>
                </shape>
            </item>

            <item>
                <shape><solid android:color="@android:color/transparent"/>
                </shape>
            </item>
        </selector>
    </item>
</ripple>

我有一个导航抽屉,使用这个抽屉作为抽屉物品的背景:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/navigation_menu_height"
    android:orientation="horizontal"
    android:background="@drawable/listItemBackground">
    ....    
</RelativeLayout>

然而,每次打开应用程序时,默认选中的项目在按下时都不会显示涟漪效果。但是在我选择另一个项目然后再次选择它之后,一切都会好起来的。

除了选择模式是多个之外,我对另一个几乎相同的ListView使用完全相同。而这一次,只要选中它们,项目就不会显示出涟漪效应。

在另一个未指定选择模式的listView中,只有第一个项目显示涟漪效果,而其他项目的行为与较低的Android版本相同。

我真的不知道如何让它适用于所有场景。也许它真的与ListView的选择模式有关?

====的修改 ====

我刚为所有这三个listView添加了属性drawSelectorOnTop,现在清除了前两个问题。然而对于第三个,它现在变成这样:

涟漪效果对所有项目都有效,除了第一个显示两个涟漪的项目!其中一个从我的手指按下的位置开始,而另一个始终从中间开始!

==== 再次编辑 ==== 好的,现在我调整drawable以将激活状态移动到ripple节点之外,与listview的drawSelectorOnTop属性一起,问题现在完全消失了。

2 个答案:

答案 0 :(得分:6)

好的,经过一些尝试和错误,我终于得到了它。

首先,将激活状态移出纹波节点:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true">
        <shape>
            <solid android:color="?android:attr/colorButtonNormal"/>
        </shape>
    </item>
    <item>
        <ripple android:color="?android:attr/colorControlHighlight">
            <item>
                <shape>
                    <solid android:color="@android:color/transparent"/>
                </shape>
            </item>
        </ripple>
    </item>
</selector>

之后,对于使用drawable作为项目背景的ListView,将drawSelectorOnTop设置为true。

现在涟漪效应可以很好地发挥作用。

答案 1 :(得分:0)

在我的情况下,第一次点击后涟漪效果正常,但是第一次点击它对我不起作用。已经使用 android:state_activated =“true”更改了背景选择器文件,并在main.xml android:clickable =“true”中更改了背景选择器文件,然后它始终正常工作。

selector.xml(在res \ drawable \ selector.xml下)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/card_bg_pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:state_activated="true" android:drawable="@drawable/card_bg_focused" android:state_enabled="true" android:state_focused="true"/>
<item android:state_activated="true" android:drawable="@drawable/card_bg_selected" android:state_enabled="false" android:state_selected="true"/>
</selector>

在activity_main.xml

 <com.mysample.RecyclingImageView
    android:id="@+id/imageview_overlay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="@drawable/selector"
    android:clickable="true" />