涟漪效应有时不会出现
Posted
技术标签:
【中文标题】涟漪效应有时不会出现【英文标题】:Ripple effect does not show up sometimes 【发布时间】:2015-02-11 22:16:16 【问题描述】:我定义了一个可绘制的波纹并将其设置为列表视图项视图的背景。它几乎可以正常工作,但涟漪效应有时不会在按下时出现。
这是波纹可绘制代码:
<?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_
android:layout_
android:orientation="horizontal"
android:background="@drawable/listItemBackground">
....
</RelativeLayout>
但是每次我打开应用程序时,默认选中的项目在我按下时不会显示波纹效果。但是在我选择另一个项目然后再次选择它之后,一切都会好起来的。
我使用完全相同的另一个几乎相同的ListView,除了选择模式是多重的。而这一次,项目只要被选中就不会出现按下的涟漪效果。
在另一个listView中,没有指定选择模式,只有第一项显示涟漪效果,其他与低版本Android相同。
我真的不知道如何让它适用于所有场景。是不是真的和ListView的选择模式有关?
====编辑====
我刚刚为这三个 listViews 添加了属性 drawSelectorOnTop,现在前两个问题都解决了。但是对于第三个,它现在变成了这样:
涟漪效果适用于所有项目,除了第一个显示两个涟漪的项目!其中一个从我手指按下的位置开始,而另一个总是从中间开始!
====再次编辑==== 好的,现在我调整drawable以将激活状态移动到涟漪节点之外,以及listview的drawSelectorOnTop属性,问题现在完全消失了。
【问题讨论】:
我正在查看您的第二次编辑 - 如果您找到了解决方案并修复了它,请继续将其作为详细答案发布,并将其标记为正确。它可能会对未来的人有所帮助。 在下面参考我的答案 【参考方案1】:好的,经过一些尝试和错误,我终于可以正常工作了。
首先,将激活状态移出波纹节点:
<?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>
之后,对于使用可绘制对象作为项目背景的 ListView,将 drawSelectorOnTop 设置为 true。
现在涟漪效果可以完美发挥了。
【讨论】:
我使用了“state_pressed”,但关键是将其移出波纹。如果您不需要“普通背景”,则根本不能使用选择器:只需在我的情况下,涟漪效应在第一次点击后起作用,但对于第一次点击它对我不起作用。已经用 android:state_activated="true" 和 main.xml android:clickable="true" 更改了背景选择器文件,那么它一直都可以正常工作。 p>
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_
android:layout_
android:layout_gravity="center_horizontal"
android:background="@drawable/selector"
android:clickable="true" />
【讨论】:
以上是关于涟漪效应有时不会出现的主要内容,如果未能解决你的问题,请参考以下文章