ImageView 圆环旋转

package com.mostmood.util;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.graphics.Paint.Style;

public class DrawImageView extends ImageView {

	private final Paint paint;
	private final Context context;

	public DrawImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
		this.paint = new Paint();
		this.paint.setAntiAlias(true);
		this.paint.setStyle(Style.STROKE);
	}

	int startAngle = 0;

	@Override
	protected void onDraw(Canvas canvas) {
		int center = getMeasuredWidth() / 2;

		int innerCircle = dip2px(context, 50); // 设置内圆半径
		int ringWidth = dip2px(context, 5); // 设置圆环宽度

		// 绘制内圆
		// this.paint.setARGB(155, 167, 190, 206);
		this.paint.setColor(android.graphics.Color.CYAN);
		this.paint.setStrokeWidth(2);
		canvas.drawCircle(center, center, innerCircle, this.paint);

		// 绘制圆环
		// this.paint.setARGB(255, 212, 225, 233);
		this.paint.setColor(android.graphics.Color.YELLOW);
		this.paint.setStrokeWidth(ringWidth);
		canvas.drawCircle(center, center, innerCircle + 1 + ringWidth / 2,
				this.paint);

		// 绘制外圆
		// this.paint.setARGB(155, 167, 190, 206);
		this.paint.setColor(android.graphics.Color.CYAN);
		this.paint.setStrokeWidth(2);
		canvas.drawCircle(center, center, innerCircle + ringWidth, this.paint);

		RectF rect2 = new RectF(center - (innerCircle + 1 + ringWidth / 2),
				center - (innerCircle + 1 + ringWidth / 2), center
						+ (innerCircle + 1 + ringWidth / 2), center
						+ (innerCircle + 1 + ringWidth / 2));

		// this.paint.setARGB(30, 127, 255, 212);
		this.paint.setColor(android.graphics.Color.GRAY);
		this.paint.setStrokeWidth(ringWidth);
		// 绘制不透明部分
		// canvas.drawArc(rect2, 180 + startAngle, 30, false, paint);
		canvas.drawArc(rect2, 0 + startAngle,10, false, paint);
		// 绘制透明部分
		// this.paint.setARGB(30, 127, 255, 212);
		// this.paint.setColor(android.graphics.Color.GRAY);
		// canvas.drawArc(rect2, 90 + startAngle, 30, false, paint);
		// canvas.drawArc(rect2, 270 + startAngle, 30, false, paint);

		startAngle += 5;
		if (startAngle == 360)
			startAngle = 0;
		super.onDraw(canvas);
		if (isStart) {
			invalidate();
		}
	}

	private boolean isStart = true;
	Object mObject = new Object();

	public void Start() {
		synchronized (mObject) {
			isStart = true;
			invalidate();
		}
	}

	public void Stop() {
		synchronized (mObject) {
			isStart = false;
			invalidate();
		}
	}

	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值