自定义view 嘛~需要做以下处理:
onDraw--朱图
onMeasure()--这里主要是对监听的处理
startAnim--画数字增加的动态效果
对画笔的要求
Paint arcPaint=new Paint(); //绘制圆弧 arcPaint.setStrokeWidth(widthBg / 20); //设置空心 arcPaint.setStyle(Paint.Style.STROKE); //防抖动 arcPaint.setDither(true); // arcPaint.setAntiAlias(true);//消除锯齿 //连接处为圆弧 arcPaint.setStrokeJoin(Paint.Join.ROUND); //画笔的笔触为圆角 arcPaint.setStrokeCap(Paint.Cap.ROUND); arcPaint.setColor(Color.BLUE);
画圆弧的增长
//圆弧范围 RectF arcRect = new RectF(widthBg * 1 / 4, widthBg * 1 / 4, widthBg * 3 / 4, widthBg * 3 / 4); //绘制背景大圆弧 canvas.drawArc(arcRect, -90, 360, false, arcPaint); arcPaint.setColor(Color.GREEN); //绘制分数小圆弧 canvas.drawArc(arcRect, -90, num, false, arcPaint);画圆柱的上升
下降自然用增加
//画柱状图 Path rectPath=new Path(); // float startHeight = widthBg + 90 + rectAgHeight; rectPath.moveTo(500,600); rectPath.lineTo(500, 600-num); arcPaint.setColor(Color.RED); canvas.drawPath(rectPath, arcPaint);
这里需要提示一点
关于变量num
是用来动态监听num的值的增长的
private void startAnim() { //圆弧动画的实现 ValueAnimator arcAnimator = ValueAnimator.ofFloat(0, (float) 220); arcAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { num = (float) animation.getAnimatedValue(); postInvalidate(); } }); animSet.setDuration(3000); //在这里可以添加多个的 animSet.playTogether(arcAnimator); animSet.start(); }其中animSet可以设置好几个值的--220那个是我们实际赋值的
最后把startAnim这个函数装到onMeasure里面既可以了