Android自定义View实现波纹效果

时间:2017-05-27     来源:移动互联网学院

1、引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的市场前景也是非常的强势。在Android应用的实际开发中,很多时候还会遇到相对比较复杂的需求,而且现在很多APP应用为了赢取更多用户的关注,不仅在用户交互体验上多做文章,还在页面效果上下了不少功夫,使用自定义View实现各种炫丽的效果,也是吸引用户的一种法宝。前一段时间,在手机上发现很多APP具有水波纹般效果。心血来潮想来自己试试,学习试做了一个用自定义View实现标准正余弦波纹给大家分享一下。

2、效果如下:

3、需关注方法:

1)onMeasure():先回调,用于控件的测量;

2)onSizeChanged():在onMeasure后面回调,可以拿到view的宽高等数据,在横竖屏切换时也会回调;

3)onDraw():绘制波纹;

4、这种水波纹可以用具体函数模拟出具体的轨迹,然后不断刷新绘制,形成动态的波纹,所以思路基本如下:

① 确定水波纹的函数方程

② 根据函数方程得出每一个波纹上点的坐标;

③ 将水波进行平移,即将水波上的点不断的移动;

④ 不断的重新绘制,不断刷新,生成动态水波纹;

5、根据上面的思路,我们进行实现:

1)正余弦函数方程为:y = Asin(wx+b)+h

这个公式在高中相信大家都学过,函数里:w决定周期,A决定振幅,h决定y位置,b为初相;根据上面的方程选取自己觉得中意的波纹效果,确定对应参数的取值;然后根据确定好的方程得出所有的方程上y的数值,并将所有y值保存在数组里:

2)根据得出的所有y值,则可以在onDraw中通过如下代码绘制两条静态波纹:

3)这种方式类似于数学里面的细分法,一条波纹,如果横向以一个像素点为单位进行细分,则形成view总宽度条直线,并且每条直线的起点和终点我们都能知道,在此基础上我们只需要循环绘制出所有细分出来的直线(直线都是纵向的)或看成是无数个点连接形成了一条静态的水波纹。之后改变两条波纹的起始点,呈现动态,当波纹移动到结尾处,重新记录并绘制,这样就会产生循环波纹的效果。

4)接下来我们让水波纹动起来,之前用了一个数组保存了所有的y值点,有两条水波纹,再利用两个同样大小的数组来保存两条波纹的y值数据,并不断的去改变这两个数组中的数据:

5)除此之外,为了让波纹在不同分辨率上的移动速度基本一致,又编写了一个UIUtil类,编写方法,将dip转换为px单位。

至此,动态的正余弦波纹效果就呈现出来。

6、效果思路总结,我们将函数确定后,通过循环将左边的点开始进行正余弦函数的往复上下移动,从而达到一种波纹状视觉体验,移动的幅度,也就是波纹的高低,全部通过一个数组存储正余弦函数生成的值,而这种往复运动也只需要不断的改变这个数组的数据,再通过OnDraw方法不断刷新,即可生成动态水波纹。刷新可以调用invalidate()或postInvalidate(),区别在于后者可以在子线程中更新UI,更方便。

7、代码整合如下:

1)UiUtil类,其中方法将dip单位转为px单位,是为让了能够控制波纹在任何分辨率都能尽量统一速度。

2)自定义波纹View中代码:

android波纹效果弹窗,Android自定义View实现波纹效果相关推荐

  1. android中仿qq最新版抽屉,Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...

  2. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  3. android 循环弹幕,Android自定义View实现弹幕效果

    原标题:Android自定义View实现弹幕效果 在很多视频直播中都有弹幕功能,而安卓上没有简单好用的弹幕控件,本文介绍一个自定义弹幕view的demo. 效果图: 思路: 自定义Textitem类表 ...

  4. android下雨动画效果,Android 自定义View(二) 下雨效果

    Rain.gif Android 自定义View(二) 下雨效果 一 实现思路, 雨点用线段表示,通过控制线段的大小和宽度来表示不同的线段. 一个雨点下雨的过程可以表示为一条直线,一次雨点在下雨的过程 ...

  5. android功能相同的view,Android自定义View实现扫描效果

    本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边 ...

  6. android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)

    秦子帅明确目标,每天进步一点点..... 作者 |  andy 地址 |  blog.csdn.net/Andy_l1/article/details/82910061 1.概述 自定义View对需要 ...

  7. Android中实现Bitmap在自定义View中的放大与拖动

    一基本实现思路: 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对MotionEvent事件的监听与处理 ...

  8. Android软件开发之盘点自定义View界面大合集(二)

    Android软件开发之盘点自定义View界面大合集(二) - 雨松MOMO的程序世界 - 51CTO技术博客 雨松MOMO带大家盘点Android 中的自定义View界面的绘制 今天我用自己写的一个 ...

  9. android 仿360浮动,Android仿360悬浮小球自定义view实现示例

    Android仿360悬浮小球自定义view实现示例 效果图如下: 实现当前这种类似的效果 和360小球 悬浮桌面差不错类似.这种效果是如何实现的呢.废话不多说 ,直接上代码. 1.新建工程,添加悬浮 ...

最新文章

  1. [转]使用CSS3 Grid布局实现内容优先
  2. POJ2115 C Looooops(线性同余方程)
  3. [Swift]扩展String类:实现find()查找子字符串在父字符串中的位置
  4. 可支持任意级选择器级联的控件函数
  5. python3自定义函数(五分钟读懂)
  6. java 子类 同名参数_Java -- 父类和子类拥有同名变量
  7. 小学生 计算机编程 教程,小学生C++创意编程(视频教学版)
  8. Infopath入门到精通系列-2 Infopath 文件内容查看
  9. 黑龙江省鹤岗市谷歌高清卫星地图下载
  10. python实现CRAPS赌博游戏。
  11. 图像处理/opencv/C++:图像马赛克
  12. FFmpeg指令行打开usb摄像头(windows)
  13. [跟进]_微软关闭MSN博客,腾讯第一时间抢占市场
  14. 如何做好谷牛期权短线交易
  15. linux 定时任务 非root,linux下的计划任务——只执行一次的定时任务,
  16. xcopy 跳过已经存在的_虚拟网红卖真衣服,真实人类已经开始买“假”衣服了!...
  17. java foxpro_面向对象的语言主要包括C、Java、VB、FoxPro、Python、R等。
  18. 【数据结构】(森林)以孩子兄弟链表为存储结构,请设计递归算法求树的深度
  19. 消防火灾联动报警系统中环网冗余型CAN转光纤的CAN光端机应用
  20. 多功能PDF工具合集:PDF Squeezer - PDF Toolbox Mac

热门文章

  1. java基础语法实例教程_Java 基础语法
  2. accept标头 php,解决PHP中缺少“授权”请求标头的问题
  3. 填充table_Excel Power Query | 向下填充的逆过程
  4. 手机电脑自适应导航源码php,自适应各终端懒人网址导航源码 v2.0
  5. python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
  6. 计算机大赛横幅标语有趣的,有趣的横幅标语
  7. 【youcans 的 OpenCV 例程 200 篇】103. 陷波带阻滤波器消除周期噪声干扰
  8. 新版CSDN中如何快速转载别人的CSDN博客,详细方法与步骤!!!
  9. 计算机电路基础答案,计算机电路基础模拟试卷答案(B)
  10. lean软件Android有吗,leanchat-android