Well, here's something for you to get started, this is not a complete solution, but from here you can complete your task.
What I'm doing is dynamically updating my mask according to progress. I just drew a line, but in your case you need to draw four lines that will make the masked rectangle in accordance with the progress. Here the code will tell me if this helps:
public class DrawView extends View implements Runnable { Bitmap mProgressBitmap; Bitmap mMaskProgressBitmap; Bitmap mResultBitmap; Canvas mTempCanvas; Canvas mMaskCanvas; Paint mPaint; Paint mWhitePaint; Handler mHandler = new Handler(); float mProgress = 0; static final long FRAME_TIME = 50; public DrawView(Context context, AttributeSet attrs) { super(context, attrs); InputStream resource = getResources().openRawResource(R.drawable.timer); mProgressBitmap = BitmapFactory.decodeStream(resource); mMaskProgressBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888); mMaskCanvas = new Canvas(mMaskProgressBitmap); mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); mResultBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888); mTempCanvas = new Canvas(mResultBitmap); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); mPaint.setDither(true); mWhitePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mWhitePaint.setColor(Color.WHITE); mWhitePaint.setStrokeWidth(50); mHandler.postDelayed(this, FRAME_TIME); } @Override public void onDraw(Canvas canvas) { mTempCanvas.drawBitmap(mMaskProgressBitmap, 0, 0, null); mTempCanvas.drawBitmap(mProgressBitmap, 0, 0, mPaint); canvas.drawBitmap(mResultBitmap, 0, 0, null); } @Override public void run() { mProgress += 0.01f; mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); mMaskCanvas.drawLine(0, 0, (float)mProgressBitmap.getWidth() * mProgress, 0, mWhitePaint); this.invalidate(); mHandler.postDelayed(this, FRAME_TIME); } }
Oren Bengigi
source share