项目中用到了这种效果的进度条设定,度娘找了半天,没找到,算了 ,自己写吧.
代码很简单,直接贴代码吧
public class EraserView extends android.support.v7.widget.AppCompatImageView { private Bitmap mBitmap; private Canvas mCanvas; private Paint mPaint; public void setProgressValue(int progressValue) { this.progressValue = progressValue; } private int progressValue; private Bitmap bm; public EraserView(Context context) { this(context, null); } private Context context; public EraserView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EraserView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } @Override protected void onVisibilityChanged(@NonNull View changedView, int visibility) { if (visibility==GONE){ if(bm != null && !bm.isRecycled()){ bm.recycle(); bm=null; } System.gc(); }else { bm = createBitmapFromARGB(0xcc000000, 600, 600); setCoverBitmap(); } super.onVisibilityChanged(changedView, visibility); } private Bitmap createBitmapFromARGB(int colorARGB, int width, int height) { int[] argb = new int[width * height]; for (int i = 0; i < argb.length; i++) { argb[i] = colorARGB; } return Bitmap.createBitmap(argb, width, height, Bitmap.Config.ARGB_8888); } private void setCoverBitmap() { // setting paint mPaint = new Paint(); mPaint.setAlpha(0); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); mPaint.setAntiAlias(true); mBitmap = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(); mCanvas.setBitmap(mBitmap); mCanvas.drawBitmap(bm, 0, 0, null); } @Override protected void onDraw(Canvas canvas) { int width = getMeasuredWidth(); int height = getMeasuredHeight(); RectF rect = new RectF(-100, -100, width+100, height+100); canvas.drawBitmap(mBitmap, 0, 0, null); mCanvas.drawArc(rect, -90, progressValue*360/100, true, mPaint); super.onDraw(canvas); } }
希望对你有帮助.
Thank You ;