Touch Feedback(触摸反馈):水波纹

2023-12-23 05:18

本文主要是介绍Touch Feedback(触摸反馈):水波纹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:
聊聊Android5.0中的水波纹效果

Android5.0水波纹效果适配4.X

简介:

Touch Feedback(触摸反馈):水波纹为:5.x以上自带 , 5.0以下版本可以使用同名的selector可兼容。

系统自带水波纹实现方式

水波纹效果大致上可以分为两种,一种是有界的,一种无界,

有界水波纹:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="?android:attr/selectableItemBackground"android:clickable="true"android:gravity="center"android:text="Hello World!" />

只需要给TextView设置背景即可,背景内容就为系统自带的selecttableItemBackground。这种是有界水波纹,就是水波纹会在TextView所在区域进行绘制。

注意:系统有界,向下兼容,API21以下也可以使用,点击会变色,但不会有水波纹效果.

无界水波纹:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="?android:attr/selectableItemBackgroundBorderless"android:clickable="true"android:gravity="center"android:text="Hello World!" />

所谓的无界并非完全无界,而是以控件宽高中最大的数值作为水波纹效果所在正方形的边界进行绘制。

特别注意: 此效果API21以上才能用,21以下会报错. 所以最小版本要设置为21

自定义水波纹实现方式

无界水波纹

自定义这个效果其实也很简单,需要在drawable文件夹中定义ripple节点,再设置上颜色就可以了:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorAccent"></ripple>

在布局文件中将之引用为控件的背景:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="@drawable/nomaskripple"android:clickable="true"android:gravity="center"android:text="Hello World!" />

注意:在res里创建drawable-v21文件white_ripple.xml,另外需要在drawable文件里创建同名文件white_ripple.xml 适配5.0以下机型.不然会崩溃的,但是5.0以下没有水波纹效果.就是点击变色效果。

示例:

white_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/ripple"><!--去掉此item内容就是无界效果--><item><shape><!-- 中间的背景色--><solid android:color="@color/white"/></shape></item></ripple>

在drawable文件里创建同名文件white_ripple.xml 适配5.0以下机型:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!-- 没有焦点时的背景颜色 --><item android:drawable="@color/white" android:state_window_focused="false" /><!-- 非触摸模式下获得焦点并单击时的背景颜色 --><item android:drawable="@color/ripple" android:state_focused="true" android:state_pressed="true" /><!-- 触摸模式下单击时的背景颜色 --><item android:drawable="@color/ripple" android:state_focused="false" android:state_pressed="true" /><!-- 选中时的背景颜色 --><item android:drawable="@color/ripple" android:state_selected="true" /><!-- 获得焦点时的背景  颜色 --><item android:drawable="@color/ripple" android:state_focused="true" />
</selector>

以下适配5.0以下的selector省略。

有界水波纹

有界水波纹需要我们在ripple节点中定义item,
item的id要为系统id mask,
然后还要定义drawable,drawable中的颜色并没有什么卵用,

水波纹的颜色是由ripple节点中的颜色来控制的

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary"><item
        android:id="@android:id/mask"android:drawable="@color/colorAccent" />
</ripple>

在布局文件中将之引用为控件的背景:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="@drawable/withmaskripple"android:clickable="true"android:gravity="center"android:text="Hello World!" />

带图片形状的水波纹

有的时候如果你希望水波纹不是长条形,又该如何呢?有两种解决方案,一种是使用图片,还有就是自定义shape,我们先来看看使用图片:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorAccent"><item
        android:id="@android:id/mask"android:drawable="@drawable/ic_launcher" />
</ripple>

在布局文件中将之引用为控件的背景:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="@drawable/picripple"android:clickable="true"android:gravity="center"android:text="Hello World!" />

自绘形状的水波纹

自绘shape,来看一个圆角矩形:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="10dp" /><solid android:color="@color/colorPrimary" />
</shape>

在ripple中引用该矩形:

<?xml version="1.0" encoding="utf-8"?>  
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">  <item  android:id="@android:id/mask"  android:drawable="@drawable/custom_shape"/>  
</ripple>  

设置背景:

        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="@drawable/shaperipple"android:clickable="true"android:gravity="center"android:text="Hello World!" />

这种方式我们在shape中定义的颜色只是用来划定水波纹显示区域,于视图显示上并没有什么用。如果你想让控件一开始就显示shape中定义的颜色,可以这样来定义ripple:

<?xml version="1.0" encoding="utf-8"?>  
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">  <!--<item-->  <!--android:id="@android:id/mask"-->  <!--android:drawable="@drawable/custom_shape"/>-->  <item>  <shape android:shape="rectangle">  <corners android:radius="10dp"/>  <solid android:color="@color/colorPrimary"/>  </shape>  </item>  
</ripple>  

带selector效果的水波纹

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorAccent"><item><selector><item
                android:drawable="@drawable/ic_launcher"android:state_pressed="true" /><item
                android:drawable="@drawable/bg"android:state_pressed="false" /></selector></item>
</ripple>
        <TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="36dp"android:background="@drawable/selectorripple"android:clickable="true"android:gravity="center"android:text="Hello World!" />

示例:

定义水波纹颜色:

    <color name="reveal_color">#1b000000</color>

drawable-v21:Android5.0水波纹

<?xml version="1.0" encoding="utf-8"?>  
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/reveal_color">  <item  android:id="@android:id/mask"  android:drawable="@color/red"/>  
</ripple>

drawable:Android5.0做兼容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime"><item android:drawable="@color/reveal_color" android:state_pressed="true"/><item android:drawable="@android:color/transparent"/></selector>

使用:

        <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/ripple_effect"android:clickable="true"android:gravity="center"android:padding="10dp"android:text="测试"android:textColor="@color/colorAccent"android:textSize="25sp" />

这篇关于Touch Feedback(触摸反馈):水波纹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526848

相关文章

XMG 触摸事件的处理过程

1.自己本身并不处理,顺着响应者链条向上传递,将事件交给响应者进行处理 2.touches默认做法:把事件传递到上一个响应者 3. super是父类不是父控件

android反馈Crash报告

此文章转载他人,担有所改动,,在全局获取异常有所改动 为什么需要反馈Crash报告?   做Android应用程序,要尽量避免程序Crash的发生。虽然说零Crash是程序员追逐的最终目标,但是现实的情况是,程序员只能尽量的减少Crash的发生,而几乎不可能完全杜绝Crash。也许,你认为你的应用的健壮性已经近乎完美,轻松的经受住了测试部门魔鬼般的考验,但是当你的应用发布到市

反馈时延与端到端拥塞控制

先从 越来越无效的拥塞控制 获得一个直感。 开局一张图,剩下全靠编。这是一道习题: 这图来自《高性能通信网络(第二版)》,2002 年的书,很好很高尚,目前这种书不多了。不准备做这道题,但意思要明白,时延越大越不同,系统越震荡,甚至跑飞不稳定,这个道理也可以从相轨迹看出。首先,先看经典的 aimd 收敛图是如何获得的。 aimd 系统的微分方程如下: d W d t = ( 1 − p

VFB电压反馈和CFB电流反馈运算放大器(运放)选择指南

VFB电压反馈和CFB电流反馈运算放大器(运放)选择指南 电流反馈和电压反馈具有不同的应用优势。在很多应用中,CFB和VFB的差异并不明显。当今的许多高速CFB和VFB放大器在性能上不相上下,但各有其优缺点。本指南将考察与这两种拓扑结构相关的重要考虑因素。 VFB和CFB运算放大器的直流及运行考虑因素 VFB运算放大器 对于要求高开环增益、低失调电压和低偏置电流的精密低频应用,VFB运算放

从0开发一个Chrome插件:用户反馈与更新 Chrome 插件

前言 这是《从0开发一个Chrome插件》系列的第二十二篇文章,也是最终篇,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必要知识从0开发一个Chrome插件:搭建开发环境从0开发一个Chrome插件:创建

AIGC-CVPR2024best paper-Rich Human Feedback for Text-to-Image Generation-论文精读

Rich Human Feedback for Text-to-Image Generation斩获CVPR2024最佳论文!受大模型中的RLHF技术启发,团队用人类反馈来改进Stable Diffusion等文生图模型。这项研究来自UCSD、谷歌等。 在本文中,作者通过标记不可信或与文本不对齐的图像区域,以及注释文本提示中的哪些单词在图像上被歪曲或丢失来丰富反馈信号。 在 18K 生成图像 (R

【Splitpanes】Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。

【Splitpanes】Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。 介绍安装使用示例与文档 介绍 Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。用于实现可调节窗口,支持Vue2、Vue3。 安装 Vue3 npm install splitpanes Vue2 npm install splitpanes@legacy 使用 <temp

使用touch-punch.js实现移动端的拖放效果

一、下载文件并引入 下载地址:http://touchpunch.furf.com/ 引入: <script src="js/jquery-ui.min.js"></script> <script src="js/jquery.ui.touch-punch.min.js"></script> 这里可以查看参数http://www.cnblogs.com/ganqiyin/archive/2

jQuery手机端触摸卡片切换效果

效果:http://hovertree.com/code/run/jquery/a1gr3gm9.html 可以用手机查看效果。 代码如下: 1 <!doctype html> 2 <html lang="zh"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=

搜维尔科技:SenseGlove虚拟训练、VR/AR 模拟和研究中的触觉反馈

训练 传统培训成本高昂且风险大,需要重复资产或停产。在培训中使用虚拟现实可以轻松解决这些问题。借助 SenseGlove,终于可以研究和评估与传统培训效果相同的虚拟培训技术。体验低成本的定制 VR 培训,同时保留现实世界的肌肉记忆和记忆力。 模拟和建模 借助 SenseGlove,与数字模型的交互变得与物理模型的交互类似。评估您的设计是否符合人体工程学,用 VR 或 AR 模拟制造过