这是一个相对简单的自定义控件,是根据总人数和统计人数的比例,来画出环形统计图,原理就是在同一个圆心上画上不同的圆形和扇形来达到想要的效果,该控件在屏幕适配上海有一些小问题,欢迎大家完善。下面是代码:import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.graphics.RectF;import android.provider.MediaStore.Video;import android.util.AttributeSet;import android.view.View;public class LoopView extends View{private int width;private int height;private float center_x;private float center_y;private float left;private float right;private float top;private float bottom;private int angle = 90;private int startAngle = 270;private float innerRadius;private float outerRadius;private float barWidth = 15;private RectF rect;// private Paint circleRing;// private Paint circleColor;// private Paint textPaint;private int mAscent;private Paint loopPaint;private int count;private int maxCount;private int textSize = 47;public LoopView(Context context){super(context);loopPaint = new Paint();}public LoopView(Context context, AttributeSet attrs){super(context, attrs);loopPaint = new Paint();}public LoopView(Context context, AttributeSet attrs, int defStyleAttr){super(context, attrs, defStyleAttr);loopPaint = new Paint();}public void setCount(int c){count = c;}public int getCount(){return count;}public void setMaxCount(int c){maxCount = c;}public int getMaxCount(){return maxCount;}public void setTextSize(int c){textSize = c;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){super.onMeasure(widthMeasureSpec, heightMeasureSpec);width=resolveSize(80, widthMeasureSpec);height=resolveSize(80, heightMeasureSpec);int size=(width>height)?height:width;center_x=width/2;center_y=height/2;outerRadius=size/2;barWidth=outerRadius/5;innerRadius=outerRadius-barWidth;left=center_x-outerRadius;right = center_x + outerRadius;top = center_y - outerRadius;bottom = center_y + outerRadius;rect=new RectF();rect.set(left, top, right, bottom);setMeasuredDimension(width, height);}@Overrideprotected void onDraw(Canvas canvas){super.onDraw(canvas);loopPaint.setColor(Color.GRAY);loopPaint.setAntiAlias(true);loopPaint.setStrokeWidth(15);canvas.drawCircle(center_x, center_y, outerRadius, loopPaint);loopPaint.setColor(Color.rgb(0, 189, 0));loopPaint.setAntiAlias(true);loopPaint.setStrokeWidth(25);//count = 75;//maxCount = 100;angle = (new Double(((float) count / (float) maxCount) * 360)).intValue();canvas.drawArc(rect, startAngle, angle, true,loopPaint);loopPaint.setColor(Color.WHITE);loopPaint.setAntiAlias(true);loopPaint.setStrokeWidth(15);canvas.drawCircle(center_x, center_y, innerRadius, loopPaint);loopPaint.setColor(Color.rgb(0, 189, 0));loopPaint.setAntiAlias(true);loopPaint.setTextAlign(Paint.Align.CENTER);loopPaint.setStrokeWidth(15);loopPaint.setTextSize(textSize);FontMetrics fontMetrics = loopPaint.getFontMetrics();float fontHeight = fontMetrics.bottom - fontMetrics.top;float textBaseY = height - (height - fontHeight) / 2 - fontMetrics.bottom;canvas.drawText(String.valueOf(count), center_y, textBaseY, loopPaint);}public void refalsh(){invalidate();}}


源码下载:http://download.csdn.net/detail/y280903468/9158929

效果图:

更多相关文章

  1. 直播软件开发Android项目之视频播放器
  2. Android的View的VISIBLE,INVISIBLE,GONE三个 属性
  3. Android(安卓)可拖拽悬浮按钮
  4. Android(安卓)listview子控件的的点击事件
  5. android 常用控件
  6. Android动态改变控件的位置
  7. NDK的sample里hello-gl2编译通过,运行报错
  8. Airtest Project Android(安卓)UI自动化测试笔记
  9. 《Monkey Android》第6课点击事件的四种写法

随机推荐

  1. 10行C++代码实现高性能HTTP服务
  2. vim编辑器的使用
  3. Linux目录结构详解(最全最详细版)
  4. Linux 实用的命令小技巧
  5. 文件下载函数
  6. 图像分割算法实战(深度学习)
  7. 索引简介
  8. 学软件测试看什么书籍推荐?
  9. 软件测试工程师的日常工作流程
  10. Eclipse安装springboot支持(sts)