位图渲染:
/**
* 用于将位图绘制为纹理的渲染器。通过设置Tile模式,可以实现位图的Repeate或Mirrore效果。
*/
public class BitmapShader extends Shader {
/** 防止垃圾回收。 @hide */
@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
public Bitmap mBitmap;
private int mTileX;
private int mTileY;
/**
* 调用次方法来创建一个新的渲染器,它将用位图绘制。
*
* @param bitmap 在渲染器内部使用的Bitmap(或用来做模板的Bitmap对象)
* @param tileX 横向的渲染规则,类型是TileMode
* @param tileY 纵向的渲染规则,类型是TileMode
*/
public BitmapShader(@NonNull Bitmap bitmap, @NonNull TileMode tileX, @NonNull TileMode tileY) {
this(bitmap, tileX.nativeInt, tileY.nativeInt);
}
private BitmapShader(Bitmap bitmap, int tileX, int tileY) {
if (bitmap == null) {
throw new IllegalArgumentException("Bitmap must be non-null");
}
if (bitmap == mBitmap && tileX == mTileX && tileY == mTileY) {
return;
}
mBitmap = bitmap;
mTileX = tileX;
mTileY = tileY;
}
@Override
long createNativeInstance(long nativeMatrix) {
return nativeCreate(nativeMatrix, mBitmap, mTileX, mTileY);
}
/** @hide */
@Override
protected Shader copy() {
final BitmapShader copy = new BitmapShader(mBitmap, mTileX, mTileY);
copyLocalMatrix(copy);
return copy;
}
private static native long nativeCreate(long nativeMatrix, Bitmap bitmap,
int shaderTileModeX, int shaderTileModeY);
}