Advertisement

Android 自定义View画圆环统计图

阅读量:
复制代码
 public class MyView extends View {

    
  
    
     public MyView(Context context) {
    
     super(context);
    
     }
    
  
    
     public MyView(Context context, @Nullable AttributeSet attrs) {
    
     super(context, attrs);
    
     }
    
  
    
     public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    
     super(context, attrs, defStyleAttr);
    
     }
    
  
    
     public void setData() {
    
     //设置数据
    
     invalidate();//用它来刷新view,显示设置数据后的图
    
     }
    
  
    
     @Override
    
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
     }
    
  
    
     @Override
    
     protected void onDraw(Canvas canvas) {
    
     super.onDraw(canvas);
    
     // 获取控件的高度和宽度
    
     int width = getWidth();
    
     int height = getHeight();
    
     
    
     Log.e("MyView", "width:" + width);
    
     Log.e("MyView", "height:" + height);
    
  
    
     Paint paint_bg = new Paint();
    
     paint_bg.setStrokeWidth(100);
    
     paint_bg.setStyle(Paint.Style.FILL);
    
     paint_bg.setColor(Color.parseColor("#FF0000"));
    
  
    
     int banjing_bg;
    
     if (width > height) {
    
         banjing_bg = height / 2 - 100;
    
     } else {
    
         banjing_bg = width / 2 - 100;
    
     }
    
     Log.e("MyView", "banjing:" + banjing_bg);
    
     RectF oval = new RectF(width / 2 - banjing_bg, height / 2 - banjing_bg, width / 2 + banjing_bg, height / 2 + banjing_bg);
    
     canvas.drawArc(oval, 0, 270, true, paint_bg);
    
  
    
  
    
     Paint paint = new Paint();
    
     paint.setStrokeWidth(100);
    
     paint.setStyle(Paint.Style.FILL);
    
     paint.setColor(Color.parseColor("#FFFFFF"));
    
     int banjing;
    
     if (width > height) {
    
         banjing = height / 2 - 200;
    
     } else {
    
         banjing = width / 2 - 200;
    
     }
    
     Log.e("MyView", "banjing:" + banjing);
    
     RectF oval1 = new RectF(width / 2 - banjing, height / 2 - banjing, width / 2 + banjing, height / 2 + banjing);
    
     canvas.drawArc(oval1, 0, 360, true, paint);
    
  
    
     }
    
  
    
 }

最初设定宽高比例时出现了偏差。
随后绘制了图形并进行了计算。
这才纠正过来。
从中可以看出数学确实非常有用。

效果图:

原图是没有变形的,一个正圆的圆环,不知道上传之后会变成什么样子。

全部评论 (0)

还没有任何评论哟~