androidripple使用总结及clickablespan的冲突解决

Sodino Sodino     2023-02-22     347

关键词:

文章目录
  1. 1. Ripple效果的设置
  2. 2. Ripple的生效
  3. 3. 不适用Ripple的场景
  4. 4. 无边界的Ripple (unbounded ripple)
  5. 5. 硬件加速开关对无边界Ripple的影响
  6. 6. 子层(Child Layer)
  7. 7. Mask层(Mask Layer)
  8. 8. 与ClickableSpan冲突
  9. 9. Ripple动画的自动播放

GitHub源码:Ripple Demo
RippleDrawable官方文档链接:RippleDrawable
效果图如下:


Ripple效果的设置

可以在XML布局文件中对 View 的 android:background 属性进行赋值.
android:foreground 的Ripple支持仅支持 FrameLayout 或其子类如support-v7中的 CardView.
android:foreground 的Ripple使用场景为当点击不透明的Image时,见效果图中的Ripple by 'foreground' Only FrameLayout Support
也可以在代码中动态设置.


Ripple的生效

当 View 有设置 OnClickListener 的情况下被点击, 或者获得/失去焦点变化时,将出现Ripple效果.


不适用Ripple的场景

  • 点击之后就立马消失的组件(setVisibility:gone invisible 或 remove).
    因为当组件恢复为visiable后,未播放完的Ripple动画会继续播放,会产生疑惑。

无边界的Ripple (unbounded ripple)

见效果图中第一行Ripple NO Child Layers or Mask (/drawable/ripple.xml)

       
        1
       
       
        2
       
       
        <
        !
        -
        - 
        An 
        unbounded 
        red 
        ripple
        . 
        -
        -
        />
       
       
        <
        ripple 
        android:color="#ffff0000" 
        />
       

ripple标签内只指定一个android:color属性时,则该ripple效果的绘制会溢出其所在View的边界,直接绘制在父控件的背景之上。
如果父控件没有设置背景,则会进一步绘制在父控件的上一级父控件的背景之上。

如在Demolayout/layout_toolbar.xml,把作为rootViewLinearLayout的属性android:background="@android:color/background_dark"删除,则会出现下图的效果:


硬件加速开关对无边界Ripple的影响

在Android 3.0 (API level 11)引入的硬件加速功能默认在application/Activity/View这三个层级上都是开启的。
但如果手贱关闭了,则无边界Ripple不会生效。
见效果图中的第二行Ripple NO Child Layers or Mask but HARDWARE OFF


子层(Child Layer)

由于View在不同的交互下有不同的state,常见的为pressed和’focused’或normal这三种状态.
所以Ripple通过多个item来表示不同state下的显示,每个item都是一个子层(Child Layer),能够直接显示colorshapedrawable/image 及 selector.

Ripple存在一个或多个子层时,则ripple效果则被限定在当前View的边界内了.无边界效果(unbounded ripple)失效.

       
        1
       
       
        2
       
       
        3
       
       
        4
       
       
        5
       
       
        6
       
       
        7
       
       
        8
       
       
        9
       
       
        10
       
       
        11
       
       
        12
       
       
        13
       
       
        14
       
       
        15
       
       
        16
       
       
        17
       
       
        18
       
       
        19
       
       
        20
       
       
        21
       
       
        22
       
       
        23
       
       
        24
       
       
        25
       
       
        26
       
       
        27
       
       
        28
       
       
        29
       
       
        30
       
       
        31
       
       
        32
       
       
        33
       
       
        34
       
       
        // ↓↓↓ Ripple With Child Layer(Color Red) and Mask
       
       
        <ripple android:color="@android:color/holo_green_light">
       
           
        <item android:id="@android:id/mask"
       
               
        android:drawable=
        "@android:color/holo_red_light" />
       
       
        </ripple >
       
       
       
       
        // ↓↓↓ Ripple With Shape and Mask
       
       
        <ripple android:color="@android:color/holo_green_light">
       
           
        <item android:id="@android:id/mask">
       
               
        <shape android:shape="rectangle">
       
                   
        <solid android:color="@android:color/holo_red_light" />
       
                   
        <corners android:radius="30dp" />
       
               
        </shape>
       
           
        </item>
       
       
        </ripple >
       
       
       
        // ↓↓↓ Ripple With Picture and Mask
       
       
        <ripple android:color="@android:color/holo_green_light">
       
           
        <item android:id="@android:id/mask"
       
               
        android:drawable=
        查看详情  

svn命令及使用总结

错误处理svn:E175009:TheXMLresponsecontainsinvalidXMLsvn:E130003:MalformedXML:noelementfound找到svnup的错误目录,然后执行svnup--set-depthempty&&svnup--set-depthinfinity 查看详情

svn命令及使用总结

错误处理svn:E175009:TheXMLresponsecontainsinvalidXMLsvn:E130003:MalformedXML:noelementfound找到svnup的错误目录,然后执行svnup--set-depthempty&&svnup--set-depthinfinity 查看详情

gdb调试命令的使用及总结

...可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入这个函数。3)设置断点  (gdb)b6  这样会在运 查看详情

001_javascript数组常用方法总结及使用案例

一、https://msdn.microsoft.com/zh-cn/library/ff679976(v=vs.94).aspx二、ip地址转换成对应的二进制.constip=‘172.16.0.5‘;constmask1=‘255.255.255.0‘;functionconvert(ipStr){returnipStr.split(‘.‘).map(function(ipSec){//ret 查看详情

r语言使用dalex包对h2o包构建的机器学习模型进行解释分析:总结及实战

R语言使用DALEX包对h2o包构建的机器学习模型进行解释分析:总结及实战 目录R语言使用DALEX包对h2o包构建的机器学习模型进行解释分析:总结及实战< 查看详情

mpandroidchart开发使用总结及采坑记录(代码片段)

...PAndroidChart之柱状图开发总结1.1设置不同的图表1.2BarChart的使用流程1.3Chart的基础设置1.4图表描述相关设置1.5是否显示右侧y轴1.6图例相关设置1.7x轴设置1.8Y轴设置二、BarChart开发实例2.1实现某一水平的高亮柱状图2.2实现训练的曲线... 查看详情

mpandroidchart开发使用总结及采坑记录(代码片段)

...PAndroidChart之柱状图开发总结1.1设置不同的图表1.2BarChart的使用流程1.3Chart的基础设置1.4图表描述相关设置1.5是否显示右侧y轴1.6图例相关设置1.7x轴设置1.8Y轴设置二、BarChart开发实例2.1实现某一水平的高亮柱状图2.2实现训练的曲线... 查看详情

java单例设计模式总结及举例

*设计模式:前人总结出来的经验,被后人直接拿来使用.*单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用.*分析:*    1.用户只能有一个对象*    2.全局的访问点:得到的对象就... 查看详情

c语言关键字registerexternstatic一些总结,及项目中使用的心得

...期。静态变量,从变量产生到整个程序执行结束。当函数使用变量结束后,变量的存储空间依然存在,变量的值也会随着函数的对其的使用而改变。如在函数内定义了一个static变量,那第一次调用该函数后,该变量的值将会被保... 查看详情

android颜色(不)透明度的使用及项目开发中的心得总结(代码片段)

文章目录背景1.Android中颜色简介2.不透明度3.使用方法3.1第一种使用方法3.2第二种使用方法3.3.第三种使用方法4.小结背景总结一下平时工作开发中,如何对UI设计稿上的颜色(不)透明度的使用心得及注意事项。1.Android... 查看详情

android颜色(不)透明度的使用及项目开发中的心得总结(代码片段)

文章目录背景1.Android中颜色简介2.不透明度3.使用方法3.1第一种使用方法3.2第二种使用方法3.3.第三种使用方法4.小结背景总结一下平时工作开发中,如何对UI设计稿上的颜色(不)透明度的使用心得及注意事项。1.Android... 查看详情

cmake用法及常用命令总结

...大小写无关的,参数和变量是大小写相关的。但推荐全部使用大写指令。符号#后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。 自己写了一个小例子,包含了静态库和动态库以及... 查看详情

小程序canvas使用,及一些坑,以及自己的一些小总结

自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的,第一回用,掉了很多坑,所以今天系统的总结一下自己所做的,如果大家有不理解的地方,欢迎提问canvas可以用来画一些东西,前台生成一些海... 查看详情

2017总结及2018计划

...用,用的过程中再不断迭代(过年期间完成,3月前正式使用)   2.学习swift重写app(2月左右)3.尽可能用rn之类的把两端app统一起来,降低维护成本(根据学习情况5-6月)4.至少读完6本书(读完之前不买新的)5.泰语学... 查看详情

springmvc接受json参数详解及常见错误总结我改

...pringMVC接受JSON参数详解及常见错误总结最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP。所以把一个练手项目的前台全部改成Ajax了,跳转再使用SpringMVC控制转... 查看详情

html2canvas使用总结及避坑

参考技术A在项目中碰到这样一个需求,需要生成一张截图,并且把这个图片传给后端,后端返回一串图片的cdn地址,然后通过postmessage的方式传给第三方页面;分享一个好用的插件html2canvas,这个插件原理就是先把html转成canvas标... 查看详情

web前端课程技术总结node.js使用方法及相关方法分析

Node.js使用方法及相关方法分析 首先我们要了解什么是node.js?官方解释是:node.js是一个基于Chromev8引擎的javascript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。他是由c++编写的所以速度很快简... 查看详情