Android 水波纹显示进度效果,很炫,关于水波纹的效果想必大家见的已经很多了,我就在这里再啰嗦一次,为了加深自己的印象。先来看看效果图

关于这个效果的实现不必想的太过复杂了,要想实现这个效果,我们还需要了解一下PorterDuff及Xfermode

关于上面的这张图想必大家也见过很多次了。这其实就是PorterDuff的16种模式。效果想比大家已经见到了,下面我们就来一一了解如何使用。

PorterDuff.Mode.CLEAR (所绘制不会提交到画布上)

PorterDuff.Mode.SRC(显示上层绘制图片)

PorterDuff.Mode.DST(显示下层绘制图片)

PorterDuff.Mode.SRC_OVER(正常绘制显示,上下层绘制叠盖)

PorterDuff.Mode.DST_OVER(上下层都显示。下层居上显示)

PorterDuff.Mode.SRC_IN(取两层绘制交集。显示上层)

PorterDuff.Mode.DST_IN(取两层绘制交集。显示下层)

PorterDuff.Mode.SRC_OUT( 取上层绘制非交集部分)

PorterDuff.Mode.DST_OUT(取下层绘制非交集部分)

PorterDuff.Mode.SRC_ATOP(取下层非交集部分与上层交集部分)

PorterDuff.Mode.DST_ATOP(取上层非交集部分与下层交集部分)

PorterDuff.Mode.XOR( 异或:去除两图层交集部分)

PorterDuff.Mode.DARKEN( 取两图层全部区域,交集部分颜色加深)

PorterDuff.Mode.LIGHTEN(取两图层全部,点亮交集部分颜色)

PorterDuff.Mode.MULTIPLY(取两图层交集部分叠加后颜色)

PorterDuff.Mode.SCREEN( 取两图层全部区域,交集部分变为透明色)

Xfermode有三个子类 :

AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素异或操作。

PorterDuffXfermode 这是一个非常强大的转换模式,使用它可以使用图像合成的上图中的任意一种来控制Paint如何与已有的Canvas图像进行交互。要应用转换模式,可以使用setXferMode方法

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));

这些只能够显示一些合成的效果也就是上面的16种的任意一种效果而已,要想实现水波纹的效果还是不够的,我们还需要借助于贝塞尔曲线来实现水波效果。我们使用到的是Path类的quadTo(x1, y1, x2, y2)方法,属于二阶贝塞尔曲线,使用一张图来展示二阶贝塞尔曲线,这里的(x1,y1)是控制点,(x2,y2)是终止点,起始点默认是Path的起始点(0,0)。关于使用贝塞尔曲线来实现水波效果的原理就是:通过for循环画出两个波纹,我们以WL代表水波纹的长度。需要波纹的-WL点、-3/4*WL点、-1/2*WL、-1/4*WL四个点,通过path的quadTo画出,并无限重复。实现的效果其实也就是我们平时的正弦效果。那么我们也需要了解一下path的使用。

先来看一下效果图

实现代码为

先来说一下mPath.moveTo(50, 300);这个方法的作用是将起点移动到屏幕坐标为(50, 300)的位置。mPath.quadTo(assistPoint.x, assistPoint.y, 450, 300);这个方法就是重点了,对应的源码为

第一个坐标是对应的控制点的坐标(assistPoint.x, assistPoint.y),第二个坐标是终点坐标也就是我们看到的水平线的终点位置坐标。上图之所以会出现移动的效果就是因为控制点的位置随着鼠标的位置在移动而产生的。

下面我们再来看一个效果图

这个图形的实现代码

再来一个效果图以及实现代码

上图是我们看到的一个静态的图,但是距离我们实现的效果已经很接近了,实现代码为

这个效果的产生其实就是上面的图形通过for循环产生移动距离产生的,代码如下

通过对比代码你会发现,其实就是通过移动定时刷新不停的调用onDraw方法,通过distance 的不断变化而产生的动画效果。如果想要实现我们最上面的动画效果还需要借助于PorterDuff及Xfermode,关于PorterDuff及Xfermode上面已经说过了。剩下的就是它们之间的配合使用了

完整的实现的代码如下:

自定义view

MainActivity.class

布局文件

以上就是对于安卓开发方面的知识点简介,Android 水波纹显示进度效果,很炫,更多相关内容请继续关注拓胜科技安卓技术频道,或者需要了解拓胜安卓培训方面的问题,可以在线免费咨询拓胜教育老师。

Android曲线水波纹动画,Android水波纹显示进度效果,很炫相关推荐

  1. android加载转圈动画,android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  2. android 向左滑动动画,Android中的滑动动画

    这是问题所在. 我想从左到右滑动(在下面的代码中从右到左--) 所以请帮我动画(XML动画与此相反)-- (当前任务在按钮单击时正确运行-) 这是源- public class MainActivit ...

  3. android 图片预览动画,Android实现仿Windows7图片预览窗格效果

    本实例将显示类似于windows7提供的图片预览窗格效果,单击任意一张图片,可以在右侧显示该图片的预览效果. 效果如图所示: 具体实现方法: res/layout/main.xml: android: ...

  4. android imageview图片旋转动画,Android 安卓动画 属性动画 - 旋转动画

    引入 属性动画的出现,弥补了补间动画的不足之处,补间动画,只是改变了表面上的东西,但是其中属性并未改变,而属性动画相反,改变了表面上的东西,并且也更改了其属性. 类:ObjectAnimator 用于 ...

  5. android图片做平移动画,Android中用Matrix实现ImageView里的图片平移和缩放动画

    注: 这里说的图片的平移和缩放不是对ImageView整个view进行的,而是对ImageView里面的图片进行的(view本身没有什么变化),所以Android自带的动画效果不能满足需求. 功能点: ...

  6. Android仿新浪微博弹出界面动画,Android仿新浪微博启动界面或登陆界面(1)

    本文为大家分享了Android模仿新浪微博启动界面&登陆界面的具体实现代码,供大家参考,具体内容如下 启动界面 主要有两个功能: 1.加载启动动画 2.判断网络,有者直接进入登陆界面,否则去设 ...

  7. Android平移补间动画,Android 补间动画之平移动画TranslateAnimation

    Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...

  8. android 张口逐帧动画,Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml 这 ...

  9. android 向左滑动动画,Android Activity左边滑出,右边滑入的动画切换

    Activity的切换动画实际上是Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha ( ...

  10. android 仿qq录音动画,Android实现QQ点赞效果动画 Android动画

    版权声明:本文为代码部落原创文章,转载请注明出处. 前言 点赞是现在社交app中比较常用的功能,一个小小的点赞按钮如果能加上一些有趣动画,一来告诉用户你已经点了赞(这是对一些手残党极大的福音),二来人 ...

最新文章

  1. 在Ubuntu 16.0.4.5 LTS上安装python 2.7版本的cv2模块
  2. pycharm解决Inconsistent indentation:mix of tabs and spaces
  3. Docker容器环境下ASP.NET Core Web API应用程序的调试
  4. python安全攻防---爬虫基础---BeautifulSoup解析
  5. Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】
  6. 到底应不应该表达自己对工作安排的不满?
  7. 序列化和反序列化(八)——Externalizable接口
  8. 例3.6 二叉搜索树 - 九度教程第36题(二叉排序树)
  9. bat脚本集合adb shell命令实现快速截屏,远比手机助手去截屏方便
  10. Flutter中的JSON解析
  11. css3中文参考手册
  12. ajax点击事件click触发两次,jQuery点击click触发两次事件解决办法
  13. 千峰JAVA逆战班Day33
  14. 【2016阿里安全峰会】“安全攻防”烧脑博弈全解读【附PDF下载】
  15. properties配置文件乱码问题
  16. 站群程序-免费站群程序排名
  17. JAVA制作网页的软件有哪些,html5开发工具(开发html5网页的软件有哪些)
  18. 【51单片机实验笔记】1. LED的初级控制
  19. 野路子解决微信服务器超时会把接口重新调起n次的方法
  20. TypeScript error in node_modules/jest-diff/build/diffLines.d.ts

热门文章

  1. AtCoder Beginner Contest 162 D.RGB Triplets
  2. 页面浏览量和点击量_如何计算页面浏览量
  3. Keil 5报错error C216: subscript on non-array or too many dimensions
  4. /etc/hosts 详解
  5. 面试软实力:你在工作中遇到过印象深刻的困难是什么,你怎么克服的?
  6. python用smtp发邮件怎么抄送_Python发送邮件并抄送
  7. Excel 多级下拉菜单设置,数据有效性
  8. IP和子网掩码和网关的关系
  9. 新浪微博正在审核的开发者平台应用添加测试账号
  10. C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制