package recitewords.apj.com.recitewords.view
;
/**
* Created by Seven on 2016/12/2.
*/
import android.content.Context
;
import android.graphics.Canvas
;
import android.graphics.Color
;
import android.graphics.Paint
;
import android.graphics.RectF
;
import android.text.TextUtils
;
import android.util.AttributeSet
;
import android.view.View
;
/**
* Created by Seven on 2016/12/2.
*/
public class CircleProgressView
extends View {
private static final String
TAG =
"CircleProgressBar";
private int mMaxProgress =
100;
private int mProgress =
0;
private final int mCircleLineStrokeWidth =
8;
private final int mTxtStrokeWidth =
2;
// 画圆所在的距形区域
private final RectF
mRectF;
private final Paint
mPaint;
private final Context
mContext;
private String
mTxtHint1;
private String
mTxtHint2;
public CircleProgressView(Context context
, AttributeSet attrs) {
super(context
, attrs)
;
mContext = context
;
mRectF =
new RectF()
;
mPaint =
new Paint()
;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas)
;
int width =
this.getWidth()
;
int height =
this.getHeight()
;
if (width != height) {
int min = Math.
min(width
, height)
;
width = min
;
height = min
;
}
// 设置画笔相关属性
mPaint.setAntiAlias(
true)
;
mPaint.setColor(Color.
rgb(
0xe9, 0xe9, 0xe9))
;
canvas.drawColor(Color.
TRANSPARENT)
;
mPaint.setStrokeWidth(
mCircleLineStrokeWidth)
;
mPaint.setStyle(Paint.Style.
STROKE)
;
// 位置
mRectF.
left =
mCircleLineStrokeWidth /
2; // 左上角x
mRectF.
top =
mCircleLineStrokeWidth /
2; // 左上角y
mRectF.
right = width -
mCircleLineStrokeWidth /
2; // 左下角x
mRectF.
bottom = height -
mCircleLineStrokeWidth /
2; // 右下角y
// 绘制圆圈,进度条背景
canvas.drawArc(
mRectF, -
90, 360, false, mPaint)
;
mPaint.setColor(Color.
rgb(
0xf8, 0x60, 0x30))
;
canvas.drawArc(
mRectF, -
90, ((
float)
mProgress /
mMaxProgress) *
360, false, mPaint)
;
// 绘制进度文案显示
mPaint.setStrokeWidth(
mTxtStrokeWidth)
;
String text =
mProgress +
"%";
int textHeight = height /
4;
mPaint.setTextSize(textHeight)
;
int textWidth = (
int)
mPaint.measureText(text
, 0, text.length())
;
mPaint.setStyle(Paint.Style.
FILL)
;
canvas.drawText(text
, width /
2 - textWidth /
2, height /
2 + textHeight /
2, mPaint)
;
if (!TextUtils.
isEmpty(
mTxtHint1)) {
mPaint.setStrokeWidth(
mTxtStrokeWidth)
;
text =
mTxtHint1;
textHeight = height /
8;
mPaint.setTextSize(textHeight)
;
mPaint.setColor(Color.
rgb(
0x99, 0x99, 0x99))
;
textWidth = (
int)
mPaint.measureText(text
, 0, text.length())
;
mPaint.setStyle(Paint.Style.
FILL)
;
canvas.drawText(text
, width /
2 - textWidth /
2, height /
4 + textHeight /
2, mPaint)
;
}
if (!TextUtils.
isEmpty(
mTxtHint2)) {
mPaint.setStrokeWidth(
mTxtStrokeWidth)
;
text =
mTxtHint2;
textHeight = height /
8;
mPaint.setTextSize(textHeight)
;
textWidth = (
int)
mPaint.measureText(text
, 0, text.length())
;
mPaint.setStyle(Paint.Style.
FILL)
;
canvas.drawText(text
, width /
2 - textWidth /
2, 3 * height /
4 + textHeight /
2, mPaint)
;
}
}
public int getMaxProgress() {
return mMaxProgress;
}
public void setMaxProgress(
int maxProgress) {
this.
mMaxProgress = maxProgress
;
}
public void setProgress(
int progress) {
this.
mProgress = progress
;
this.invalidate()
;
}
public void setProgressNotInUiThread(
int progress) {
this.
mProgress = progress
;
this.postInvalidate()
;
}
public String
getmTxtHint1() {
return mTxtHint1;
}
public void setmTxtHint1(String mTxtHint1) {
this.
mTxtHint1 = mTxtHint1
;
}
public String
getmTxtHint2() {
return mTxtHint2;
}
public void setmTxtHint2(String mTxtHint2) {
this.
mTxtHint2 = mTxtHint2
;
}
}
以上是自定义View的源码。
在布局文件的引用如下:
<recitewords.apj.com.recitewords.view.CircleProgressView
android:id="@+id/review_progress"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center">
在Activity设置进度:
holder.
progress.setProgress(
25)
;
可用Handler来动态设置进度。
转载请注明原文地址: https://ju.6miu.com/read-962472.html