水波扩散是一个比较好看的交互效果,特别是在某些以水为故事发生场景的游戏中,扩散的水波会让场景更加栩栩如生 ?...掏空式往外涌 但是水波往外扩散是呼吸灯式的一波波往外涌,而且不是这种无尽式的一直把东西往外掏的感觉,所以我们要给cc_time.x加上一个周期性的变化,让它能表现出这种周期性的往外扩散的感觉。...周期性往外涌 这种呼吸灯式的涌动其实和我们的最终效果有很大区别,因为它永远在循环涌动,但是我们的水波是从中心扩散出去之后,中间部分就不再动了的,怎么让中间的像素不再多次涌动呢?...如果把一圈水波比作圆,那水波的扩散行为其实就是这个圆的半径在不断的增大,圆外面的波纹有效,圆里面的波纹静止。...因此我们可以多加一个距离取样,像素离扩散中心的距离大于半径才保留否则丢弃,而这个半径从零开始逐渐增大。
本文实例为大家分享了Android 5.0 实现水波扩散效果的具体代码,供大家参考,具体内容如下 该效果是通过自定义界面来实现的 1、首先自定义属性,attrs.xml代码如下: <?...2、自定义RippleView类继承RelativeLayout布局,也可以由需求所定继承于其它类,实现水波扩散效果主要的有两点:水波扩散的绘制和动画 1)水波的绘制其实就是绘制一个圆形 canvas.drawCircle...private float mMaskAlpha;// 遮掩透明度 private float mRippleAlpha;// 水波透明度 private int mRippleTime;// 水波动画时间...private ObjectAnimator mRippleAnim;// 显示水波动画 private float mRadius;// 当前的半径 private float mMaxRadius...;// 水波最大半径 private float mDownX; // 记录手指按下的位置 private float mDownY; private boolean mIsMask; private
本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 ? 囧!没有图片所以就拿了小安代替了。 先看一下如何使用这个View。...给大了就看不到扩散效果了,给小,给多少的值合适呢?有没有正好的值,有的用父 view 的 size / 子 view 放大的倍数,这样肯定会达到理想的效果。...RIPPLE_VIEW_COUNT = 3;//波纹view的个数 private static final float DEFAULT_SCALE = 1.6f;//波纹放大后的大小 //点击有扩散效果的...position); wave.startAnimation(mAnimas.get(position)); super.handleMessage(msg); } }; 参考地址:Android实现水波纹外扩效果
/1.12.4/jquery.js"> $(function () { // 1..../1.12.4/jquery.js"> $(function () { // 1..../1.12.4/jquery.js"> $(function () { // 1..../1.12.4/jquery.js"> $(function () { // 1..../1.12.4/jquery.js"> $(function () { // 1.
本文讲述了Android实现水波纹扩散效果的实例代码。分享给大家供大家参考,具体如下: 项目地址下载 1.效果图: ?...*/ private ImageView [] imgs=new ImageView[SIZE]; /**背景图片*/ private ImageView img_bg; /**水波纹和背景图片的大小*...imageViewHeigth)); //添加一个规则 params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE); /**添加水波纹图片...0.5f); } //============================对外暴露的public方法========================================= /** * 开始水波纹动画...show_spacing_time); mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, show_spacing_time * 2); } /** * 停止水波纹动画
起初,我认真的时候,你不认真,现在你认真了,我却已离你有些远了。想想当时我们一起学习一起努力的日子,是不是有种莫名的喜悦。现在大家工作了,也会遇到一些前端设计的...
两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 ?...,越大扩散越慢 private List<Integer spreadRadius = new ArrayList< ();//扩散圆层级数,元素为扩散的距离 private List<Integer...distance : 1; alphas.set(i, alpha); spreadRadius.set(i, width + distance); } } //当最外层扩散圆半径达到最大半径时添加新扩散圆...两种方式实现的扩散效果介绍完毕,具体项目里还是要按需变动的。...总结 以上所述是小编给大家介绍的Android 实现圆圈扩散水波动画效果两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
确认需求 首先还是老套路,先确定一下需求,捋一下思路,然后才好写代码: 1.首先要有一个圆2.这个圆会边扩散边消失3.当这个圆扩散到一定程度的时候再绘制一个圆4.有限循环 / 无限循环5.可以有 / 无...这个圆会边扩散边消失 一边扩散,一边消失。 没错,这里也是使用这种 evaluate 来计算大小和透明度。...那就要创建一个 List 来存放我们的刚才定义好的「会扩散消失的圆」。...> 来控制每一个「会扩散消失的圆」。...这样一个有水波纹扩散效果的 Widget 就封装完成了。
首先来看一个UI动效图。 动效来自Dribbble 效果图是是Dribbble上看到的,原作品在此。 我所实现的效果如下: Watch on YouTube ?...,如下: CircularAnim.hide(mChangeBtn).go(); 同理,让按钮伸展开: CircularAnim.show(mChangeBtn).go(); 以View为水波触发点收缩其它...int maxRadius = (int) Math.sqrt(w * w + h * h) + 1; // 若未设置时长,则以PERFECT_MILLS为基准根据水波扩散的距离来计算实际时间...,速度应随最大边距的变小而越慢,扩散时间应随最大边距的变小而变小,因此比率应在 @rate 与 1 之间。...final long finalDuration = mDurationMills; // 由于thisActivity.startActivity()会有所停顿,所以进入的水波动画应比退出的水波动画时间短才能保持视觉上的一致
长按水波纹扩展效果 前言 水波纹效果从Android5.0就已经出来了,基本的使用相信大家都知道了,这里多谈一些相对深层次的使用: 1、基本使用 2、水波纹效果与布局绘制之间的问题 3、长按水波纹扩散效果...4、Button点击的水波纹效果 基本使用 系统自带水波纹实现方式 有界水波纹 android:background="?...image.png 长按水波纹扩散效果 ? 长按水波纹扩展效果 在使用小红书时,我们可以看到关于“笔记”的item长按会展示扩散的效果,其实原理也很简单。...无边界的水波纹可以达到长按扩散的效果,只是它会超出边界,那我们就在对应的父布局加一层有边界的水波纹背景即可。...参考资料 Ripple 水波纹效果 聊聊Android5.0中的水波纹效果 解决点击ripple水波纹无效的问题 UI之修改Button颜色保持默认点击效果
Varlet组件库提供了一个使元素点击时生成水波扩散效果的指令: 点击 图片 接下来就从源码角度看看它是如何实现的...this.appendChild(ripple) // 20ms后修改水波元素的样式,达到水波的扩散动画效果 window.setTimeout(() => { ripple.style.transform...因为水波元素为被点击元素的子元素,所以这些坐标都是相对于被点击元素的左上角坐标计算的: 从绿色的圆过渡成红色的圆,透明度、大小、位置的变化就是水波的扩散效果。...setTimeout(task, 60) : task() } 先回顾一下创建水波的各个阶段的耗时,当我们第一次点击元素时,等待60ms后会创建水波元素,然后再等待20ms后会开始进行水波的扩散效果,动画耗时...还剩下的时间,因为前面提到了水波从创建到扩散完成整个过程大概耗时20ms + 200ms = 220ms,所以延迟dealy时间,也就是等待水波动画完成后再让水波消失,避免水波还未扩散完成就消失的情况,
PS:自定义view篇-水波纹实现 效果:水波纹扩散 场景:雷达、按钮点击效果、搜索等 实现:先上效果图,之前记得支付宝有一个咻一咻,当时就是水波纹效果,实现起来一共两步,第一画内圆,第二画多个外圆...,越大扩散越慢 private List spreadRadius = new ArrayList();//扩散圆层级数,元素为扩散的距离 private List...centerPaint.setColor(centerColor); //消除锯齿 centerPaint.setAntiAlias(true); //水波纹扩散...spreadPaint.setStyle(Paint.Style.STROKE); spreadPaint.setAlpha(255); //初始化第一个水波纹... centerX = w / 2; centerY = h / 2; } 2、开始绘制onDraw() 我们已经做了好前奏,剩下的就开始绘制了,首先我们要确定几个圆才能形成水波纹效果
和尚想自定义一个水波纹按钮,即默认向外扩散的水波样式;实现方式有很多种,和尚尝试最基本的 AnimationController 逐层绘制来处理,和尚简单记录一下尝试过程; ACEWaterButton...和尚画了一个简单的图如下,预期的水波纹按钮包括两层,以中心圆(蓝色)为基础逐步向外围扩散至(绿色),并循环重复; 1....水波纹 和尚预想实现水波纹效果则必然离不开 Animation 动画,使用动画方式也有多种,可以继承 AnimatedWidget 也可以使用 AnimationController 自定义动画样式...; 和尚预期水波纹不仅范围逐渐变大,并且在扩散过程中透明度逐渐降低,至外围最大范围为止消失;和尚采用最基本的 CustomPainter 自定义 Canvas.drawCircle,根据时间进度来逐层绘制水波纹...暂时先不缺省,因为和尚在设置水波纹扩散过程中,同时设置了透明度的渐变,若缺省内置圆会影响 innerIcon 的展示效果;但内置圆绘制位置可以调整,也可以在 ACEWaterPainter 中进行绘制;
一、理论依据 水波的物理学模型便是理论依据。水波有如下特性: 扩散:水波总是从被扰动的中心向外扩散。在水波扩散过程中每个点都在得到能量后以自己为中心震动,并向四周传播能量。...之所以从干扰点向外扩散,是因为内部的各点能量互相抵消而看不到震荡。重要的是,每个点都在以自己为中心进行震荡,并向四周扩散能量。 衰减:水波在传播过程中能量会逐渐的衰减,因为水的震荡是有阻尼的。...反射:由于水波表面的凹凸不平,比起平静时期的水面,水面上各点反光程度将会不同程度的受到影响,从而改变了自己的亮度,颜色。 水波还有衍射等特性。但是考虑问题的核心在于能量传递或者能量扩散。...从而,虽着实间的推移,能量就会被扩散开来。 为了保证执行效率,水波的扩散、折射等均用简化后的模型代替,以使算法成为线性简单的;对于里面的乘法、除法运算尽量采用2的幂,可以通过移位运算快速实现。...即x0在下一个时刻的振幅要由自身的当前振幅和受周围12个点的能量扩散得到。并且假设这12个点影响x0的程度都一样,这个模型已经得到很大的简化。
前阵子一个好友-离心泵(QQ:33522)恰巧写了个,我在他的基础上改进了一些功能,增加了一些接口设置,比如提供参数可以控制水波的消失速度,扩散的速度,水波的面积大小以及水波的深度等。...二、实现的功能 1:可设置显示的图像 2:可设置衰减系数,控制消失速度,值越小水波消失越快 3:可设置折射系数,控制扩散速度,值越大水波扩散越快 4:可设置石头大小,控制水波面积,值越大水波面积越大 5...* 2:可设置衰减系数,控制消失速度,值越小水波消失越快 * 3:可设置折射系数,控制扩散速度,值越大水波扩散越快 * 4:可设置石头大小,控制水波面积,值越大水波面积越大 * 5:可设置石头重量...鼠标按下出的坐标 QTimer *timer; //定时器绘制 private slots: //执行计算位图进行绘制 void drawImage(); //水波步进扩散...= 1; h < imageHeight - 1; h++) { for(int w = 1; w < imageWidth - 1; w++) { //波能扩散
当用户点击时,会以点击中心为圆心产生一个水波扩散的涟漪效果,适用各个场景,美观又不浮夸,关键是可以给用户带来很直观的反馈。...定制一个水波纹默认样式 水波纹实际上就是通过用户点击的位置生成一个小圆圈,并且尺寸逐渐扩大到整个被点击元素的一个过程,所以这里先制定一个水波基本的样式,并设置好过度动画,过度动画应该是一个先慢后快的一个过程...然后我们需要在鼠标按下时创建水波,监听鼠标按下的事件,这里以pc端为例子,刚创建水波时使用transform缩小到0.3,这是作者尝试过相对合适的创建大小, 然后修改transform触发过度水波扩散动画...ripples.length) { return } const lastRipple = ripples[ripples.length - 1] // 通过水波的创建时间计算出扩散动画还需要执行多久...,确保每一个水波都完整的执行了扩散动画 const delay = 300 - performance.now() + Number(lastRipple.dataset.createdAt)
这样就没有效果,按钮会变成默认的灰色状态,点击按钮也不会有颜色的状态区别 为了兼容5.0以下的设备,我们可以利用seletor(勘误:button用theme在5.0以下也是有按压变色的,虽然没有水波纹...xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值...xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值...xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值...xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值
5.0引入了很多动画效果,是谷歌提供的自带的效果,其中触摸反馈就是一种,简而言之就是点击水波纹效果,Button就默认带有水波纹效果 ?...attr/selectableItemBackground"--和Button一样的效果(扩散时有边界,边界就是View的宽高) 2.android:background="?...attr/selectableItemBackgroundBorderless"--扩散不含边界 两种值的效果如下: ?...我们还可以改变水波纹的形状,需要在drawable自定义水波纹效果的xml,这边用了默认的安卓机器人启动图标 <?xml version="1.0" encoding="utf-8"?
揭露效果也是5.0谷歌引入的一种效果,可以以一个水波纹扩散的形式显示控件,使用也很简单 先看下效果: ?...调用ViewAnimationUtils的createCircularReveal方法获取animator 参数:1-需要执行动画的View,2-动画中心的x坐标,3-动画中心的y坐标, 4-开始水波纹半径...,5-结束水波纹半径 imageview.setOnClickListener(new View.OnClickListener() { @Override...ViewAnimationUtils //参数:1-需要执行动画的View,2-动画中心的x坐标,3-动画中心的y坐标, 4-开始水波纹半径...,5-结束水波纹半径 .createCircularReveal(v, v.getWidth() / 2, v.getHeight() / 2, 0, v.getWidth
但是系统自带的水波纹效果只是一个短暂的点击响应过程,也就是最后水波纹消失了。 如果要让水波纹扩散后保持住,比如实现一个水波纹选中效果,就无法实现了。 原生的水波纹效果就不说了,相信大家都会。...实现水波纹选中效果 需要哪些工具 开始之前,来看看整个定制过程需要用到哪些工具: 继承自FrameLayout 或 View Paint:画笔工具 Scroller:实现水波纹扩散或者收缩动画 Path...shrinkRipple() } } return super.onTouchEvent(event) } // 扩散水波纹...触发水波纹绘制动画 首先看下触发水波纹扩散的方法: class RippleLayoutKtl: FrameLayout { // .........简单说一下收缩 水波纹 的过程: 在水波纹 已经展开 ,或者在 扩散的过程中 ,用户再次点击了控件,这时候,需要把水波纹 收缩回来 。
领取专属 10元无门槛券
手把手带您无忧上云