最近研究自定义View,于是做了这个demo,供大家参考
参考了一位博主文章:http://blog.csdn.net/lilong85362952/article/details/41447967
自定义View的代码:
public class DrawView extends View implements ViewRefreshInterface, OnTouchListener {
private RectF rectF;
private List<Integer> colors;
private List<SectorItem> mList;
// 圆心
private Point point;
// 半径
private int radius = 0;
// view刷新
private int a = 0;
private int refeshAngle = 0;
private int number = 0;
private boolean isPause;
Thread thread = new Thread();
private ViewRefreshUtil viewRefreshUtil;
private ViewRefreshUtil.ViewRefreshInterfaceEntity viewRefreshInterface;
private ViewClickListener viewClickListener;
private Context mContext;
public DrawView(Context context) {
super(context);
init(context);
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@SuppressLint("ClickableViewAccessibility")
private void init(Context context) {
this.mContext = context;
colors = new ArrayList<Integer>();
mList = new ArrayList<SectorItem>();
colors.add(Color.RED);
colors.add(Color.GREEN);
colors.add(Color.BLUE);
colors.add(Color.YELLOW);
viewRefreshUtil = ViewRefreshUtil.getRefreshUtil();
viewRefreshInterface = viewRefreshUtil.addViewRefreshInterface(this);
this.setOnTouchListener(this);
DisplayMetrics dm = new DisplayMetrics();
((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(dm);
isPause = false;
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setAntiAlias(true);// 抗锯齿
paint.setStyle(Style.STROKE);// Style.FILL: 实心, STROKE:空心, FILL_OR_STROKE:同时实心与空心
// paint.setStrokeCap(Cap.ROUND);// 画笔样式:圆形 Cap.ROUND, 方形 Cap.SQUARE
// paint.setStrokeJoin(Join.ROUND);// 平滑效果
paint.setStrokeWidth(15);
// paint.setColor(Color.BLUE);
// canvas.drawLine(0, 50, 450, 50, paint);// 画线
// canvas.drawRect(0, 0, 20, 60, paint);// 画矩形
// canvas.drawCircle(100, 50, 50, paint);// 画圆
// canvas.drawOval(rectF, paint);// 画椭圆或者圆
a += 1;
refeshAngle += 1;
int temAngle = 0;
paint.setStyle(Style.FILL);
paint.setStrokeWidth(14);
for (int i = 0; i < number; i++) {
paint.setColor(colors.get(i));
temAngle += mList.get(i).getEndAngle() - mList.get(i).getStartAngle();
if (temAngle >= a) {
drawMyView(canvas, paint, rectF, mList.get(i).getStartAngle(), refeshAngle);
if (refeshAngle == mList.get(i).getEndAngle() - mList.get(i).getStartAngle()) {
refeshAngle = 0;
number = (number < mList.size()) ? number + 1 : mList.size();
}
} else {
drawMyView(canvas, paint, rectF, mList.get(i).getStartAngle(), Math.abs(mList.get(i).getEndAngle() - mList.get(