我有一个以位图为源的ImageView。我想给ImageView一个选择器/纹波/色调。当我点击ImageView时,我想显示一个白色的(#AAFFFFFF)与alpha的色调。
这就是我尝试过的。
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的背景。但是,这会改变我的位图后面的背景,因此在位图顶部看不到。
请看这段视频以获得帮助图像纹波效应。
视频有涟漪效应。我希望这种波纹在后棒棒糖设备和一个简单的色调,没有波纹前棒棒糖。
我怎样才能达到这个效果?
发布于 2015-11-30 08:05:51
对于波纹效应,您不需要选择器,而需要一个波纹,例如
<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>
并将其置于draable-v21 folder.For预棒棒糖设备下,创建一个正常的选择器,并将其设置为background.Also,这两个文件应该具有相同的名称。
发布于 2015-11-30 08:43:26
不如ImageButton而不是ImageView。您可以轻松地为不同的状态设置背景选择器。
发布于 2015-11-30 08:59:28
首先,为了在API 21+上获得良好的波纹效应,并在较旧的平台上返回到轻影,请确保您使用的是appcompat-v7支持库,然后可以使用?selectableItemBackground
来获得效果。
现在的问题是如何在ImageView
的基础上添加效果。以下是一些可能的解决办法。
ImageView
作为ListView
中的项,则可以为ListView
设置以下属性。
FrameLayout
上添加包装ImageView
以获得前景波纹。请注意,andriod:foreground
只是从API v23添加到所有视图中,所以我们不能使用它。ImageView
以添加向后兼容的前台支持。如果你想走这条路,请留下评论,我会在这里写更多。编辑:
查看我用前台实现的RelativeLayout
:https://gist.github.com/DreaminginCodeZH/9067a68d6e836389933c
将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应该始终工作(很容易),而不需要上面所需的所有工作。你需要利用它与轻微的性能损失你自己。
https://stackoverflow.com/questions/33993725
复制相似问题