各位看官们大家好,上一回中咱们说的例子是"Java中的进制转换",这一回中咱们说的例子是"绘制向外扩散的水波纹"。闲话休提,言归正转, 让我们一起Talk Android吧!
我们使用自定义View的思路来实现水波纹,先画一个圆环,然后通过动画不断地放大圆环进而形成向外扩散的效果,在放大圆环的同时让圆环逐渐变透明,形成波纹消失
的效果。两种动画效果叠加在一起就形成了扩散的水波纹效果。
介绍完实现方法,下面是示例代码,请大家参考:
public class WaveView extends View {private Paint mPaint;private int radius;private int circleWidth;private Context mContext;public WaveView(Context context) {super(context);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);init(context);}private void init(Context context) {mContext = context;mPaint = new Paint();mPaint.setColor(Color.BLUE);mPaint.setStyle(Paint.Style.STROKE);mPaint.setAntiAlias(true);circleWidth = 20;mPaint.setStrokeWidth(circleWidth);radius = 100;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int x = getMeasuredWidth()/2;int y = getMeasuredHeight()/2;radius = getMeasuredWidth()/2-10;if(x<150){mPaint.setColor(Color.RED);}if(x>150 && x<250) {mPaint.setColor(Color.GREEN);}if(x>250 && x<350) {mPaint.setColor(Color.BLUE);}canvas.drawCircle(x, y, radius, mPaint);}public void startPlay() {Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.wave_aimation);this.startAnimation(animation);}
}
上面的代码中的多个if判断条件是为了依据不同的宽度来设置不同的画笔颜色,这样可以画出不同颜色的圆环来。代码中使用的是视图动画集,下面是动画集中的代码:
把自定义的控件添加到布局中,然后在代码中获取布局中的控件,接着使用控件中的startPlay()方法就可以播放动画了,动画的效果就是向外扩散的水波纹。
上一篇:C语言学习笔记——指针(初阶)