Android: Drawing tiled bitmaps with bottom or some other alignments similar to css background-position

前端 未结 3 762
感情败类
感情败类 2021-01-22 07:37

I want to set a background of a View with a tiled bitmap, but the tiling needs to be anchored to the bottom-left, instead of the top-left corner (the default). For example, if t

3条回答
  •  清酒与你
    2021-01-22 08:24

    Another way would be to extend BitmapDrawable and override the paint() method:

    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()));
    

提交回复
热议问题