表盘绘制

来源:互联网 发布:网络部组织架构图 编辑:程序博客网 时间:2024/04/25 07:28

表盘绘制主要是用到了pathEffect和shader

public class TestCircleView extends View {    private Paint mPaint;    private Paint mNormalPaint;    private Shader mShader;    public TestCircleView(Context context) {        super(context);        init(context);    }    public TestCircleView(Context context, AttributeSet attrs) {        super(context, attrs);        init(context);    }    public TestCircleView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init(context);    }    private void init(Context context) {        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        mPaint.setStrokeWidth(20);        mPaint.setStyle(Paint.Style.STROKE);        PathEffect effect = new DashPathEffect(new float[] {5, 8, 5, 8}, 1);        mPaint.setPathEffect(effect);        mNormalPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        mNormalPaint.setStrokeWidth(20);        mNormalPaint.setStyle(Paint.Style.STROKE);        mNormalPaint.setPathEffect(effect);        mShader = new SweepGradient(400, 300, new int[] {0xFF09F68C,                0xFFB0F44B,                0xFFE8DD30,                0xFFF1CA2E,                0xFFFF902F,                0xFFFF6433}, null);        mPaint.setShader(mShader);    }    @Override    protected void onDraw(Canvas canvas) {        Path path = new Path();        path.rewind();        path.addCircle(400, 300, 200, Path.Direction.CW);        canvas.clipPath(path, Region.Op.UNION);        canvas.drawCircle(400, 300, 200, mNormalPaint);        RectF rectF = new RectF(200, 100, 600, 500);        canvas.drawArc(rectF, -90, mSweepAngle, false, mPaint);        //canvas.drawCircle(400, 300, 200, mPaint);    }    private float mSweepAngle = 0;    public void test() {        ValueAnimator animator = ObjectAnimator.ofFloat(0f, 1f);        animator.setDuration(3000);        animator.setInterpolator(new LinearInterpolator());        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                float value = (float) valueAnimator.getAnimatedValue();                mSweepAngle = 360f * value;                postInvalidate();            }        });        animator.start();    }}


0 0
原创粉丝点击