@Override public void draw(Canvas canvas) { Rect rect = getBounds(); int count = canvas.saveLayer(new RectF(rect), null, Canvas.ALL_SAVE_FLAG); canvas.translate(rect.left, rect.top); mClipPath.reset(); mClipPath.addCircle(rect.width() / 2, rect.height() / 2, Math.min(rect.width(), rect.height()) / 2, Path.Direction.CCW); canvas.clipPath(mClipPath); if (mContentBitmap == null && !TextUtils.isEmpty(mContentText)) { mTextPaint.setColor(mBgColor); canvas.drawRect(rect, mTextPaint); int fontSize = this.mFontSize <= 0 ? (Math.min(rect.width(), rect.height()) / 2) : this.mFontSize; mTextPaint.setTextSize(fontSize); mTextPaint.setColor(mTextColor); canvas.drawText(mContentText, rect.width() / 2, rect.height() / 2 - ((mTextPaint.descent() + mTextPaint.ascent()) / 2), mTextPaint); } else { mMatrix.setScale(rect.width() * 1.0f / mContentBitmap.getWidth(), rect.height() * 1.0f / mContentBitmap.getHeight()); Bitmap scaleContentBitmap = Bitmap.createBitmap(mContentBitmap, 0, 0, mContentBitmap.getWidth(), mContentBitmap.getHeight(), mMatrix, true); canvas.drawBitmap(scaleContentBitmap, rect, rect, null); } canvas.restoreToCount(count); }