我有一个带有Bitmap的ImageView作为其来源。我想给ImageView一个选择器/纹波/色调。当我点击ImageView时,我想用alpha显示白色(#AAFFFFFF)色调。
这就是我的尝试。
selector_image.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/blue_a" android:state_pressed="true"/>
<item android:drawable="@color/green_a" android:state_selected="true"/>
<item android:drawable="@color/red_a" android:state_activated="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>
然后我使用android:background="@drawable/selector_image"
将其设置为ImageView的背景。但是这会改变我的Bitmap背后的背景,因此在Bitmap的顶部不可见。
查看此视频以获取帮助 Image Ripple Effect
视频有涟漪效应。我希望在棒棒糖后装置中产生这种波纹,并在前棒棒糖上使用简单的色彩而没有波纹。
我怎样才能达到这个效果?
答案 0 :(得分:0)
对于涟漪效果影响,您不需要选择器,但需要像
这样的波纹<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item android:id="@android:id/mask">
<shape android:shape="oval">
<solid android:color="?android:colorAccent" />
</shape>
</item>
</ripple>
并将其放在 drawable-v21 文件夹下。对于预棒棒糖设备,创建一个普通选择器并将其设置为背景。这两个文件应该具有相同的名称。
答案 1 :(得分:0)
ImageButton而不是ImageView怎么样?您可以轻松地为不同的状态设置背景选择器。
答案 2 :(得分:0)
首先,要在API 21+上获得良好的连锁效果,并在旧平台上回退到阴影,请确保使用appcompat-v7 support library,然后您可以使用?selectableItemBackground
获取效果。
现在的问题是如何在ImageView
之上添加效果。以下是一些可能的解决方案。
如果您使用ImageView
作为ListView
中的项目,则可以为ListView
设置以下属性。
<ListView
...
android:drawSelectorOnTop="true"
android:listSelector="?selectableItemBackground" />
如果您使用ImageView
内的FrameLayout
,则可以将纹波设置为FrameLayout
的前景。
<FrameLayout
...
android:foreground="?selectableItemBackground" />
您始终可以在FrameLayout
上添加换行ImageView
以获得前景波纹。请注意,andriod:foreground
仅添加到自API v23以来的所有视图中,因此我们无法使用它。
您还可以扩展ImageView
以向其添加向后兼容的前台支持。如果你想这样做,请发表评论,我会在这里写更多相关内容。
修改强>
使用前景https://gist.github.com/DreaminginCodeZH/9067a68d6e836389933c
检查RelativeLayout
的实施情况
将attrs.xml
放入res/values
,将ForegroundRelativeLayout.java
放入您自己的包中,然后将RelativeLayout
的所有出现替换为ImageView
。
然后,您可以在XML中引用自定义视图。不要使用ImageView
,而是使用自定义视图的完全限定名称(例如com.example.android.ForegroundImageView
)作为标记名称,并向其添加android:foreground="?selectableItemBackground"
。这样它现在应该可以正常工作。
(如果你没有定位API 23,它将正常工作,它将为API 23上的所有视图启用前景(否则它将无法启用),从而产生两个前景 - 他的代码写得很远在API 23发布之前。如果你的目标是API 23,你可以通过自己添加一些API级别检查来解决这个问题。)
我还打算发布一个android:foreground
向后兼容的库。如果我有时间:)
还有一件事,用ImageView
包裹FrameLayout
的解决方案#3应始终(轻松)工作,而不需要上面的所有工作。你需要利用它自己带来轻微的性能损失。