自定义下载圆形按钮 发表于 2016-08-10 | 分类于 安卓 先看效果图: 下面直接上代码:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 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文件 12345678910111213141516171819202122 <?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>