自定义水波纹view

95 篇文章 0 订阅
今天自定义个水波纹扩散 或者收缩 效果的view;先上效果

/**
 * 自定义view实现 水波纹 效果
 */
public class MoireView extends View {
    private Paint paint;
    //最大半径
    private int radius;
    //绘制半径
    private int drawRadius;
    //屏幕宽高
    private int w, h;
    //背景颜色
    private int backColor = Color.TRANSPARENT;
    //水波纹颜色
    private int moireColor = Color.WHITE;
    //动画执行时间
    private int duration = 2000;
    //是否是扩散水波纹
    private boolean isDiffusion = true;


    public MoireView(Context context) {
        super(context);
        init();
    }


    public MoireView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }


    private void init() {
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(moireColor);

        MyAnimation myAnimation = new MyAnimation();
        myAnimation.setDuration(duration);
        startAnimation(myAnimation);
    }

    /**
     * 动画
     */
    public class MyAnimation extends Animation {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            super.applyTransformation(interpolatedTime, t);
            if (isDiffusion){
                //扩散水波纹效果
                drawRadius = (int) (radius * interpolatedTime);
            }else {
                //收缩水波纹效果
                drawRadius=radius-(int) (radius * interpolatedTime);

            }

            postInvalidate();
        }


    }


    /**
     * 测量
     *
     * @param widthMeasureSpec
     * @param heightMeasureSpec
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        w = MeasureSpec.getSize(widthMeasureSpec);
        h = MeasureSpec.getSize(heightMeasureSpec);
        radius = (int) Math.sqrt(w * w + h * h) / 2;

    }


    /**
     * 绘制
     *
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        //设置背景颜色
        canvas.drawColor(backColor);
        //绘制圆
        canvas.drawCircle(w / 2, h / 2, drawRadius, paint);


    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值