Ran*_*ku' 2 shader android tiling bitmap drawable
我想设置一个带有平铺位图的视图背景,但是平铺需要锚定到左下角,而不是左上角(默认).例如,如果瓷砖是下面的笑脸,我希望它像平铺一样:

使用xml drawables我可以实现平铺(使用tileMode="repeat")或底部定位(使用gravity="bottom"),但是无法将两者结合使用,即使文档中也这样说:
机器人:TILEMODE
关键词.定义切片模式.启用切片模式后,将重复位图.启用切片模式时,将忽略重力.
虽然它没有内部支持,有没有办法实现这一点,也许使用自定义视图?
另一种方法是扩展BitmapDrawable和覆盖该paint()方法:
在此方法中,我们避免创建具有视图大小的新位图.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
它可以设置为这样的视图:
view.setBackgroundDrawable(new MyBitmapDrawable(getResources().getDrawable(R.drawable.smiley).getBitmap()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |