[Android UI] 波浪特效的实现

本文目标是实现一个可自定义的波浪特效。

先看效果:

波浪特效

相关知识点:
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

有任何思路或者问题,欢迎随时交流。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值