效果图:

1、布局文件
<com.my.administrator.zdyview.MyPath
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
mystyle:myview_background="@mipmap/meinv4"
mystyle:myview_paintwidth="30dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffccff"
android:text="开始" />
2、
public class MyPath extends View {
private int width;
private int height;
private Path mPath;
private Paint mPaint;
private Paint mPaintNew;
private Canvas mCanvas;
private Bitmap mBitmap;
private int count = 0;
private Paint mPaintText;
private int progress=306;
private int progressCurrent;
public int getProgressCurrent() {
return progressCurrent;
}
public int getProgress() {
return progress;
}
public void setProgressCurrent(int progressCurrent) {
this.progressCurrent = progressCurrent;
}
public void setProgress(int progress) {
this.progress = progress;
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x23:
count+=30;
if(count>80){
count=0;
}
invalidate();
handler.sendEmptyMessageDelayed(0x23, 20);
break;
}
}
};
public MyPath(Context context) {
super(context);
}
public MyPath(Context context, AttributeSet attrs) {
super(context, attrs);
mPaintText = new Paint();
mPaintText.setColor(Color.BLACK);
mPaintText.setTextSize(50);
mPaintText.setTextAlign(Paint.Align.CENTER);
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setTextSize(20);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
mPaint.setColor(Color.BLUE);
mPaint.setAntiAlias(true);
mPaintNew = new Paint();
mPaintNew.setColor(Color.RED);
mPaintNew.setStrokeWidth(5);
mPaintNew.setStyle(Paint.Style.FILL);
mPath = new Path();
handler.sendEmptyMessage(0x23);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(width, height);
mBitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.argb(0xff, 0x08, 0x7e, 0x72));
mCanvas.drawCircle(300, 300, 150, mPaintNew);
mPath.reset();
mPath.moveTo(500, 453 - progressCurrent);
mPath.lineTo(500,453);
mPath.lineTo(count, 453);
mPath.lineTo(count, 453 -progressCurrent);
for(int i =0;i<10;i++) {
mPath.rQuadTo(20, 5, 40, 0);
mPath.rQuadTo(20, -5, 40, 0);
}
mPath.close();
mCanvas.drawPath(mPath, mPaint);
canvas.drawBitmap(mBitmap,0,0,null);
canvas.drawText(progressCurrent*100f/progress+"%",300,300,mPaintText);
}
}
3、Activity文件
public class MainActivity extends AppCompatActivity {
private MyPath view;
private Button mButton;
private int progress;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x21:
progress+=3;
if (progress <= 306) {
view.setProgressCurrent(progress);
handler.sendEmptyMessageDelayed(0x21, 20);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}