单个水波纹扩散

 布局

    <com.ee.MyWaveD
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.ee.MyWaveD>

package com.ee;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MyWaveD extends View {
    public MyWaveD(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private Paint paint;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        switch (event.getAction()) {
        /*
         * 当按下的时候开始绘制圆环水波纹
         */
        case MotionEvent.ACTION_DOWN:
            // 1. 设置圆心
            startX = event.getX();
            startY = event.getY();

            // 2.根据圆心创建新的圆
            initView();

            // 3.绘制
            invalidate();

            break;

        default:
            break;
        }
        return true;
    }

    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            // 1.透明度改变-小
            int alpha = paint.getAlpha();
            alpha -= 5;
            if (alpha < 0) {
                alpha = 0;
            }
            // 透明度:0~255之间
            paint.setAlpha(alpha);

            // 2.半径变大
            radius += 5;
            paint.setStrokeWidth(radius / 3);

            // 3.再次绘制一个,执行onDraw方法
            invalidate();
        };
    };

    /*
     * 第一步、构造器
     */

    /**
     * 初始化View
     */
    private int radius;// 半径

    private void initView() {
        paint = new Paint();
        // 设置颜色
        paint.setColor(Color.RED);
        // 设置抗锯齿
        paint.setAntiAlias(true);
        // 设置圆环样式
        paint.setStyle(Style.STROKE);
        // 半径为5
        radius = 5;
        paint.setStrokeWidth(radius / 3);

    }

    // 圆形坐标
    private float startX;
    private float startY;

    /**
     * 绘制环形水波纹
     */
    @Override
    protected void onDraw(Canvas canvas) {
        if (paint.getAlpha() > 0) {
            if (startX > 0 && startY > 0) {
                // 绘制一个圆环
                canvas.drawCircle(startX, startY, radius, paint);
                // 绘制的同时,发送一个延迟消息
                handler.sendEmptyMessageDelayed(0, 50);
            }
        }
    }
}
原文地址:https://www.cnblogs.com/3674-it/p/5481772.html