Android如何实现水波纹控件

  介绍

小编给大家分享一下安卓如何实现水波纹控件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

有很多应用使用过水波纹的这样的效果,看着很酷酷的样子,所以自己就撸码写了一个。

 Android如何实现水波纹控件

<强>实现思路:

利用贝塞尔曲线绘制圆弧(也就是水波的波纹)
通过动画改变绘制的起始点使水波纹平移

首先,定义我们需要的自定义属性。

& 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;,i

Android如何实现水波纹控件