Border over a bitmap with rounded corners in Android Border over a bitmap with rounded corners in Android android android

Border over a bitmap with rounded corners in Android


I put the following together for myself.

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int color, int cornerDips, int borderDips, Context context) {    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),            Bitmap.Config.ARGB_8888);    Canvas canvas = new Canvas(output);    final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips,            context.getResources().getDisplayMetrics());    final int cornerSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) cornerDips,            context.getResources().getDisplayMetrics());    final Paint paint = new Paint();    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());    final RectF rectF = new RectF(rect);    // prepare canvas for transfer    paint.setAntiAlias(true);    paint.setColor(0xFFFFFFFF);    paint.setStyle(Paint.Style.FILL);    canvas.drawARGB(0, 0, 0, 0);    canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);    // draw bitmap    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));    canvas.drawBitmap(bitmap, rect, rect, paint);    // draw border    paint.setColor(color);    paint.setStyle(Paint.Style.STROKE);    paint.setStrokeWidth((float) borderSizePx);    canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);    return output;}

Credits, of course, to http://ruibm.com/?p=184


How about to prepare 9-patch image like below and set it as a background by using android:background

enter image description here


I use BitmapShader and drawRoundRect do it and it work for me, look at the screenshot

enter image description here

RectF roundRect; // the Rect you have to draw intoPaint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// draw the border at bottommPaint.setStyle(Paint.Style.FILL);mPaint.setColor(mBorderColor);canvas.drawRoundRect(roundRect, mRadius, mRadius, mPaint);// ------------------ draw scheme bitmaproundRect.set(itemRect.left + mBorderSize, itemRect.top + mBorderSize, itemRect.right - mBorderSize, itemRect.bottom - mBorderSize);Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mPaint.setShader(shader);canvas.drawRoundRect(roundRect, mRadius, mRadius, mPaint);mPaint.setShader(null);