提供第二种旋转画布的实现方式
================================
把我用到的图片传上来
==============================
RoundProgressBar
效果图:
/**
* Created by wzl on 2016/7/6.
*/
public class RoundProgressBar extends View {
private Paint paint;
//圆环宽度
private int offset = 0;
private int max = 100;
private int progress = 0;
//圆点半径
private int pointRadius = 0;
//进度条末尾处显示的图片
private Bitmap bitmap;
//进度条中间显示的文字
private String content;
public RoundProgressBar(Context context) {
super(context);
init();
}
public RoundProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RoundProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public RoundProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
offset = AppUtils.dip2px(5);
paint.setDither(true);
paint.setStrokeCap(Paint.Cap.ROUND);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.share_progress_point);
pointRadius = Math.max(bitmap.getWidth(), bitmap.getHeight()) / 2;
}
public void setProgress(int process) {
if (process >= max) {
process = max;
}
this.progress = process;
invalidate();
}
public void setMax(int max) {
if (max <= 0) {
max = 100;
}
this.max = max;
invalidate();
}
public void setText(String text) {
content = text;
invalidate();
}
//padding无效,如用到padding,需自行计算
@Override
protected void onDraw(Canvas canvas) {
//中心点坐标
int centerX = getWidth() / 2;
int centerY = getHeight() / 2;
//中间文字
if (!TextUtils.isEmpty(content)) {
paint.setTextSize(AppUtils.dip2px(12));
paint.setStrokeWidth(AppUtils.dip2px(0.5f));
paint.setStyle(Paint.Style.FILL);
float textLength = paint.measureText(content);
canvas.drawText(content, centerX - textLength / 2, centerY, paint);
}
//取最小半径
int radius = Math.min(centerX, centerY) - offset / 2;
paint.setStyle(Paint.Style.STROKE);
paint.setColor(getResources().getColor(R.color.default_background));
paint.setStrokeWidth(offset);
//画外圈圆
canvas.drawCircle(centerX, centerY, radius, paint);
radius -= offset;
paint.setColor(getResources().getColor(R.color.divider_color));
//画内圈圆
canvas.drawCircle(centerX, centerY, radius, paint);
paint.setColor(getResources().getColor(R.color.title_color));
RectF rect = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
int corner = 360 * progress / max;
canvas.drawArc(rect, -90, corner, false, paint);
Matrix matrix = new Matrix();
matrix.postTranslate(centerX - pointRadius, offset * 3 / 2 - pointRadius);
matrix.postRotate(corner, centerX, centerY);
canvas.drawBitmap(bitmap, matrix, paint);
}
// 提供第二种旋转画布的实现方式
// @Override
// protected void onDraw(Canvas canvas) {
// //中心点坐标
// int centerX = getWidth() / 2;
// int centerY = getHeight() / 2;
// 中间文字
// if (!TextUtils.isEmpty(content)) {
// paint.setTextSize(AppUtils.dip2px(12));
// paint.setStrokeWidth(AppUtils.dip2px(0.5f));
// paint.setStyle(Paint.Style.FILL);
// float textLength = paint.measureText(content);
// canvas.drawText(content, centerX - textLength / 2, centerY, paint);
// }
// //取最小半径
// int radius = Math.min(centerX, centerY) - offset / 2;
// paint.setStyle(Paint.Style.STROKE);
// paint.setColor(getResources().getColor(R.color.default_background));
// paint.setStrokeWidth(offset);
// //画外圈圆
// canvas.drawCircle(centerX, centerY, radius, paint);
// radius -= offset;
// paint.setColor(getResources().getColor(R.color.divider_color));
// //画内圈圆
// canvas.drawCircle(centerX, centerY, radius, paint);
// paint.setColor(getResources().getColor(R.color.title_color));
// RectF rect = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
// int corner = 360 * progress / max;
// //旋转画布
// canvas.rotate(corner, centerX, centerY);
// canvas.drawArc(rect, -90 - corner, corner, false, paint);
// Matrix matrix = new Matrix();
// matrix.postTranslate(centerX - pointRadius, offset * 3 / 2 - pointRadius);
// canvas.drawBitmap(bitmap, matrix, paint);
// }
}