美文网首页
Android雷达效果

Android雷达效果

作者: aruba | 来源:发表于2020-01-07 11:18 被阅读0次
雷达.gif
定义一些变量
    private int width, height, radius;
    private SweepGradient sweepGradient;
    private Paint paint = new Paint();
    private Matrix matrix = new Matrix();
    //递增的角度
    private int FACTOR = 2;
    private int RATIO = 0;
    //背景paint
    private Paint bgPaint = new Paint();
在onlayout中初始化参数
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        width = getMeasuredWidth();
        height = getMeasuredHeight();
        radius = (int) (Math.min(width, height) / 2.0f);

        sweepGradient = new SweepGradient(radius, radius, new int[]{Color.GREEN, Color.TRANSPARENT}, null);
        paint.setShader(sweepGradient);
        paint.setAntiAlias(true);

        bgPaint.setStyle(Paint.Style.STROKE);
        bgPaint.setAntiAlias(true);
        bgPaint.setColor(Color.WHITE);
        bgPaint.setStrokeWidth(2);
        bgPaint.setPathEffect(new DashPathEffect(new float[]{10, 10}, 0));
    }
ondraw中利用使用sweepGradient 的paint画圆,并利用matrix旋转变换实现旋转
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawCircle(radius, radius, radius, paint);
        drawBackGround(canvas);

        RATIO += FACTOR;
        if (RATIO == 360) {
            RATIO = 0;
        }
        matrix.setRotate(RATIO, radius, radius);
        sweepGradient.setLocalMatrix(matrix);
        postInvalidateDelayed(10);
    }

    /**
     * 画背景
     *
     * @param canvas
     */
    private void drawBackGround(Canvas canvas) {
        canvas.drawCircle(radius, radius, radius, bgPaint);
        canvas.drawCircle(radius, radius, radius / 4.0f, bgPaint);
        canvas.drawCircle(radius, radius, radius * 2.0f / 4.0f, bgPaint);
        canvas.drawCircle(radius, radius, radius * 3.0f / 4.0f, bgPaint);
        canvas.drawPoint(radius, radius, bgPaint);

        Path path_h = new Path();
        path_h.moveTo(0, radius);
        path_h.lineTo(radius * 2, radius);
        canvas.drawPath(path_h, bgPaint);

        Path path_v = new Path();
        path_v.moveTo(radius, 0);
        path_v.lineTo(radius, radius * 2);
        canvas.drawPath(path_v, bgPaint);
    }

项目地址:https://gitee.com/aruba/ShaderApplication.git

相关文章

网友评论

      本文标题:Android雷达效果

      本文链接:https://www.haomeiwen.com/subject/stdractx.html