创建一个不透明的可绘制波纹
Posted
技术标签:
【中文标题】创建一个不透明的可绘制波纹【英文标题】:Create a ripple drawable without transparency 【发布时间】:2015-01-14 01:55:55 【问题描述】:我对如何正确使用 Ripple Drawable 有点迷茫。
假设我有这个drawable:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="false" android:state_focused="true" android:drawable="@color/accent_color_light" />
<item android:state_pressed="true" android:drawable="@color/accent_color_light" />
<item android:drawable="@android:color/white" />
</selector>
所以它是一个纯白色的背景,当它被聚焦或按下时会变成浅蓝色。
我怎样才能获得相同的颜色但具有涟漪效果? 我想我需要使用遮罩来防止它超出视图范围?
【问题讨论】:
【参考方案1】:忘了回答我自己的问题。
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_shortAnimTime"
android:color="@color/my_color" >
<item android:id="@android:id/mask">
<shape android:shape="rectangle" >
<solid android:color="@android:color/holo_green_light" />
</shape>
</item>
</ripple>
id为“mask”的item中的颜色不显示。它用于说明波纹效果的形状和范围。没有它,它可能会超出视图的范围。
【讨论】:
谢谢你!救了我-> ***.com/questions/43531552/… 这意味着我们可以将mask
id 下的形状的颜色设置为我们想要的任何颜色并且它不可见?我做对了吗?【参考方案2】:
RippleDrawable
已经是StateListDrawable
(即selector
) - 所以你可以使用可绘制的波纹作为背景(具有默认状态) - 像这样:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/accent_color_light">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
<item android:drawable="@android:color/white" />
</ripple>
遮罩部分限制了波纹(实际上,上面的 sn-p,减去颜色和设置非按压背景的最后一个 android:drawable
)是棒棒糖中使用的 default list selector。
【讨论】:
以上是关于创建一个不透明的可绘制波纹的主要内容,如果未能解决你的问题,请参考以下文章
delphi 怎样绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件 不透明