先看效果图:
下面直接上代码:
public class CircleProgressView extends LinearLayout {
private ImageView mIcon;
private TextView mNote;
private boolean mProgressEnable;//是否绘制背景
private long mMax = 100;//默认100
private long mProgress;
public CircleProgressView(Context context) {
this(context, null);
}
public CircleProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
View view = View.inflate(context, R.layout.inflate_circleprogressview, this);
mIcon = (ImageView) view.findViewById(R.id.circleProgressView_iv_icon);
mNote = (TextView) view.findViewById(R.id.circleProgressView_tv_note);
}
/**
* 设置图片
*
* @param resId
*/
public void setIcon(int resId) {
mIcon.setImageResource(resId);
}
public void setNote(String note) {
mNote.setTextColor(UIUtils.getColor(R.color.app_detail_safe_normal));
mNote.setText(note);
}
/**
* 设置是否允许进度
*
* @param mProgressEnable
*/
public void setProgressEnable(boolean mProgressEnable) {
this.mProgressEnable = mProgressEnable;
}
/**
* 设置最大值
*
* @param mMax
*/
public void setMax(long mMax) {
this.mMax = mMax;
}
/**
* 设置当前进度
*
* @param mProgress
*/
public void setProgress(long mProgress) {
this.mProgress = mProgress;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);// 绘制具体的内容(图片和文字)
if (mProgressEnable) {
//绘制
RectF oval = new RectF(mIcon.getLeft(), mIcon.getTop(), mIcon.getRight(), mIcon.getBottom());
float startAngle = -90;//起始弧度。从正上方开始
float sweepAngle = mProgress * 360.f / mMax;//扫过的弧度
boolean userCenter = false;//是否保留俩边
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);//链接处圆形
paint.setStrokeWidth(UIUtils.dip2px(3));
canvas.drawArc(oval, startAngle, sweepAngle, userCenter, paint);
}
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/circleProgressView_iv_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_download" />
<TextView
android:id="@+id/circleProgressView_tv_note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="随意" />
</LinearLayout>