Android 自定义View 慢慢画一个不同颜色扇形的圆,点击圆上不同颜色扇形区域返回不同颜色

最近研究自定义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(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值