ImageView的选择器/纹波/色调

时间:2015-11-30 07:49:44

标签: android imageview ripple

我有一个带有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

视频有涟漪效应。我希望在棒棒糖后装置中产生这种波纹,并在前棒棒糖上使用简单的色彩而没有波纹。

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

3 个答案:

答案 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之上添加效果。以下是一些可能的解决方案。

  1. 如果您使用ImageView作为ListView中的项目,则可以为ListView设置以下属性。

    <ListView
        ...
        android:drawSelectorOnTop="true"
        android:listSelector="?selectableItemBackground" />
    
  2. 如果您使用ImageView内的FrameLayout,则可以将纹波设置为FrameLayout的前景。

    <FrameLayout
        ...
        android:foreground="?selectableItemBackground" />
    
  3. 您始终可以在FrameLayout上添加换行ImageView以获得前景波纹。请注意,andriod:foreground仅添加到自API v23以来的所有视图中,因此我们无法使用它。

  4. 您还可以扩展ImageView以向其添加向后兼容的前台支持。如果你想这样做,请发表评论,我会在这里写更多相关内容。

  5. 修改

    使用前景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应始终(轻松)工作,而不需要上面的所有工作。你需要利用它自己带来轻微的性能损失。