介绍
小编给大家分享一下安卓如何实现水波纹控件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
有很多应用使用过水波纹的这样的效果,看着很酷酷的样子,所以自己就撸码写了一个。
<强>实现思路:强>
利用贝塞尔曲线绘制圆弧(也就是水波的波纹)
通过动画改变绘制的起始点使水波纹平移
首先,定义我们需要的自定义属性。
& lt; ? xml version=?.0“,编码=皍tf-8" ?比; & lt; resources> ,& lt; declare-styleable name=皐aveStyleable"比; & lt;才能!——,水波纹的长度——比; & lt;才能attr name=皐aveLength",格式=癴loat"祝辞& lt;/attr> & lt;才能!——,水波纹的高度——比; & lt;才能attr name=皐aveHeight",格式=癴loat"祝辞& lt;/attr> & lt;才能!——,水波纹的速度——比; & lt;才能attr name=皐aveSpeed",格式=癴loat"祝辞& lt;/attr> & lt;才能!——水波纹上方的头像,——比; & lt;才能attr name=皐aveTopIcon",格式=皉eference"祝辞& lt;/attr> & lt;才能!——水波的颜色,——比; & lt;才能attr name=皐aveColor",格式=癱olor"祝辞& lt;/attr> & lt;才能!——水波距离底部的距离,——比; & lt;才能attr name=癲istanceY",格式=癴loat"祝辞& lt;/attr> ,& lt;/declare-styleable> & lt;/resources>
自定义观点绘制水波纹控件
public class WaveView extends View { ,private Paint 颜料; ,private Path 路径; ,private float  waveLength ; ,private float  waveHeight ; ,private float  waveSpeed ; ,private Bitmap ,位图; ,private int  waveColor ; ,private int strokeWidth =, 3; ,private Region ; ,private int 宽度、高度; ,public int  translateX ; ,private float  distanceY; ,public WaveView (Context 上下文),{ 超级才能(上下文); ,} ,public WaveView (Context 上下文,AttributeSet attrs), { 超级才能(上下文,attrs); TypedArray 才能;array =, context.obtainStyledAttributes (R.styleable.waveStyleable attrs也); 时间=waveLength 才能;array.getFloat (R.styleable.waveStyleable_waveLength, 300); 时间=waveColor 才能;array.getColor (R.styleable.waveStyleable_waveColor 0 x00ff00); 时间=waveHeight 才能;array.getFloat (R.styleable.waveStyleable_waveHeight, 100); 时间=waveSpeed 才能;array.getFloat (R.styleable.waveStyleable_waveSpeed 5); 时间=distanceY 才能;array.getFloat (R.styleable.waveStyleable_distanceY, 100); Drawable 才能;waveTopICon =, array.getDrawable (R.styleable.waveStyleable_waveTopIcon); array.recycle才能(); 时间=bitmap 才能;drawableToBitmap (waveTopICon); initPaint才能(); startAnimal才能(); ,} ,private void  initPaint (), { paint 才能=,new 油漆(); paint.setStyle才能(Paint.Style.FILL); paint.setColor才能(waveColor); paint.setStrokeWidth才能(strokeWidth);//才能绘制贝塞尔曲线的路径 时间=path 才能;new 路径(); ,} ,@Override ,protected void  onDraw (Canvas 画布),{ super.onDraw才能(画布);//才能绘制贝塞尔曲线 drawPath才能(画布,路径);//才能绘制波上部的头像 drawIcon才能(画布); ,} ,private void  drawIcon (Canvas 画布),{ float 才能;baseLine =, height-distanceY; 如果才能(region.getBounds直()上==基线){ ,,canvas.drawBitmap(位图宽度/2-bitmap.getWidth ()/2, region.getBounds () .bottom-bitmap.getHeight(),油漆); }else {才能 ,,如果(region.getBounds直()上==0){ ,,,canvas.drawBitmap(位图宽度/2-bitmap.getWidth ()/2, height-bitmap.getHeight () -distanceY,油漆); ,,} ,,canvas.drawBitmap(位图宽度/2-bitmap.getWidth ()/2, region.getBounds () .top-bitmap.getHeight(),油漆); ,,} ,} ,private void  drawPath (Canvas ,帆布,Path 路径),{ path.reset才能();//路径的才能起始点,向手机外多绘制一段 path.moveTo才能(2 *,waveLength + translateX,获得()-distanceY); ,,(int 小姐:=,0;,iAndroid如何实现水波纹控件