[Android UI] 波浪特效的实现
2015-11-07 19:09
344 查看
本文目标是实现一个可自定义的波浪特效。
先看效果:
相关知识点:
canvas绘图、BitmapShader、PorterDuff.Mode.SRC_ATOP。
思路:
1.准备两张图,一张为图案,一张为波浪的形状。
2.先绘制图案。
3.绘制波浪。这里有两个关键点,一个是设置画笔的BitmapShader为波浪底图,另一个是绘制的时候,使用图形混合模式PorterDuff.Mode.SRC_ATOP 进行绘制。
4.控制波浪运动。实际上就是移动画布,使波浪的图案产生偏移,从而出现动态的效果。
我准备了两张图:
其中,第一张图的图案的周围是透明的,而第二张图,波浪周围也是透明的。这里需要注意,要让波浪运动起来连续,波浪的开头部分和结尾部分需要平滑衔接。
设置画笔的shader:
设置这个shader后,在canvas上绘制一块矩形区域,看到的样子可能为这样:
这里宽度只截了一部分,实际上如果宽度是无限的,这个图看起来顶部就是一条连续的波浪曲线。
把canvas移动到适当的位置,然后与背景图案混合在一起的效果如下:
而文中一开始的图中,背景的半透明黑色圆形,直接就drawCircle就ok了。
好了,详细demo,请移步我的 github
有任何思路或者问题,欢迎随时交流。
先看效果:
相关知识点:
canvas绘图、BitmapShader、PorterDuff.Mode.SRC_ATOP。
思路:
1.准备两张图,一张为图案,一张为波浪的形状。
2.先绘制图案。
3.绘制波浪。这里有两个关键点,一个是设置画笔的BitmapShader为波浪底图,另一个是绘制的时候,使用图形混合模式PorterDuff.Mode.SRC_ATOP 进行绘制。
4.控制波浪运动。实际上就是移动画布,使波浪的图案产生偏移,从而出现动态的效果。
我准备了两张图:
其中,第一张图的图案的周围是透明的,而第二张图,波浪周围也是透明的。这里需要注意,要让波浪运动起来连续,波浪的开头部分和结尾部分需要平滑衔接。
设置画笔的shader:
shader = new BitmapShader(waveBitmap, Shader.TileMode.REPEAT, //x轴方向采用repeat的模式 Shader.TileMode.CLAMP); //y轴方向采用clamp模式,复制最后一像素
设置这个shader后,在canvas上绘制一块矩形区域,看到的样子可能为这样:
这里宽度只截了一部分,实际上如果宽度是无限的,这个图看起来顶部就是一条连续的波浪曲线。
把canvas移动到适当的位置,然后与背景图案混合在一起的效果如下:
而文中一开始的图中,背景的半透明黑色圆形,直接就drawCircle就ok了。
好了,详细demo,请移步我的 github
有任何思路或者问题,欢迎随时交流。
相关文章推荐
- UI设计师不可不知的安卓屏幕知识
- LeetCode -- Repeated DNA Sequences
- 使用mysql_query()方法操纵数据库以及综合实例
- 工作队列(workqueue) create_workqueue/schedule_work/queue_work
- Qt Quick 事件处理之信号与槽
- 在android的spinner中,实现取VALUE值和ID值
- IOS 自定义 UIView 实现重用
- iOS开发25-iOS可视化编程-Interface Builder
- UVA 11235 Frequent values
- windows SysinternalsSuite
- 设置UILabel可变高度(根据文本内容自动适应高度)
- client sent invalid header line: "X-Hts_user: true" while reading client request headers
- UIAlertController的使用
- iOS 多线程初学习之dispatch_async(dispatch_get_main_queue(), ^{})
- UIProgressView(进度条控件)
- C# 实现 微软WebRequestMethods.Ftp类中的FTP操作功能
- xcodebuild 命令 后面加一个 GCC_OPTIMIZATION_LEVEL=0,这样 就可以调试 了 静态库了
- Play 2, Scala, postgresql and Squeryl 整合
- UITableView 使用方法(一) - 创建简单的列表
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解