首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于ImageView的选择器/波纹/金币

用于ImageView的选择器/波纹/金币
EN

Stack Overflow用户
提问于 2015-11-30 07:49:44
回答 3查看 1.5K关注 0票数 0

我有一个以位图为源的ImageView。我想给ImageView一个选择器/纹波/色调。当我点击ImageView时,我想显示一个白色的(#AAFFFFFF)与alpha的色调。

这就是我尝试过的。

selector_image.xml

代码语言:javascript
运行
复制
<?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的背景。但是,这会改变我的位图后面的背景,因此在位图顶部看不到。

请看这段视频以获得帮助图像纹波效应

视频有涟漪效应。我希望这种波纹在后棒棒糖设备和一个简单的色调,没有波纹前棒棒糖。

我怎样才能达到这个效果?

EN

回答 3

Stack Overflow用户

发布于 2015-11-30 08:05:51

对于波纹效应,您不需要选择器,而需要一个波纹,例如

代码语言:javascript
运行
复制
<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,这两个文件应该具有相同的名称。

票数 0
EN

Stack Overflow用户

发布于 2015-11-30 08:43:26

不如ImageButton而不是ImageView。您可以轻松地为不同的状态设置背景选择器。

票数 0
EN

Stack Overflow用户

发布于 2015-11-30 08:59:28

首先,为了在API 21+上获得良好的波纹效应,并在较旧的平台上返回到轻影,请确保您使用的是appcompat-v7支持库,然后可以使用?selectableItemBackground来获得效果。

现在的问题是如何在ImageView的基础上添加效果。以下是一些可能的解决办法。

  1. 如果使用ImageView作为ListView中的项,则可以为ListView设置以下属性。
  2. 您始终可以在FrameLayout上添加包装ImageView以获得前景波纹。请注意,andriod:foreground只是从API v23添加到所有视图中,所以我们不能使用它。
  3. 您还可以扩展ImageView以添加向后兼容的前台支持。如果你想走这条路,请留下评论,我会在这里写更多。

编辑:

查看我用前台实现的RelativeLayouthttps://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应该始终工作(很容易),而不需要上面所需的所有工作。你需要利用它与轻微的性能损失你自己。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33993725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档