Bitmap with tile mode repeat and round corners

后端 未结 2 634
無奈伤痛
無奈伤痛 2021-01-24 04:51

I have a bitmap with rounded corners method:

Code:

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
        Bitmap output = Bitm         


        
2条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-24 05:30

    Try out with extend BitmapDrawable and override the paint() method to set the image in tile mode:

    In this method we avoid creating a new bitmap having the size of the view.

    class MyBitmapDrawable extends BitmapDrawable {
        private Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
        private boolean mRebuildShader = true;
        private Matrix mMatrix = new Matrix();
    
        @Override
        public void draw(Canvas canvas) {
            Bitmap bitmap = getBitmap();
            if (bitmap == null) {
                return;
            }
    
            if (mRebuildShader) {
                mPaint.setShader(new BitmapShader(bitmap, TileMode.REPEAT, TileMode.REPEAT));
                mRebuildShader = false;
            }
    
            // Translate down by the remainder
            mMatrix.setTranslate(0, getBounds().bottom % getIntrinsicHeight());
            canvas.save();
            canvas.setMatrix(mMatrix);
            canvas.drawRect(getBounds(), mPaint);
            canvas.restore();
        }
    }
    

    It can be set to the view like this:

    view.setBackgroundDrawable(new MyBitmapDrawable(getResources().getDrawable(R.drawable.smiley).getBitmap()));
    

    Check out its reference HERE

提交回复
热议问题