有时候我们需要实现图像的渐变效果,这时候Shader就派上用场啦。
Android提供的Shader类主要用于渲染图像以及几何图形。
Shader的主要子类如下:
BitmapShader———图像渲染
LinearGradient——–线性渲染
RadialGradient——–环形渲染
SweepGradient——–扫描渲染
ComposeShader——组合渲染
在开发中调用paint.setShader(Shader shader)就可以实现渲染效果,在此以常用的BitmapShader为示例实现圆形图片。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setAntiAlias(true);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mm);
int radius = bitmap.getWidth()/2;
BitmapShader bitmapShader = new BitmapShader(bitmap,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
paint.setShader(bitmapShader);
canvas.translate(250,430);
canvas.drawCircle(radius, radius, radius, paint);
}
效果如下图所示:
1 生成BitmapShader,请参见代码第7行
2 为Paint设置Shader,请参见代码第8行
3 画出圆形图片,请参见代码第10行
在这段代码中,可能稍感陌生的就是BitmapShader构造方法。
BitmapShader(Bitmap bitmap, TileMode tileX, TileMode tileY
)
第一个参数:
bitmap表示在渲染的对象
第二个参数:
tileX 表示在位图上X方向渲染器平铺模式(TileMode)
TileMode一共有三种:
REPEAT :重复
MIRROR :镜像
CLAMP:拉伸
这三种效果类似于给电脑屏幕设置屏保时,若图片太小可选择重复,拉伸,镜像。
若选择REPEAT(重复 ):横向或纵向不断重复显示bitmap
若选择MIRROR(镜像):横向或纵向不断翻转重复
若选择CLAMP(拉伸) :横向或纵向拉伸图片在该方向的最后一个像素。这点和设置电脑屏保有些不同
第三个参数:
tileY表示在位图上Y方向渲染器平铺模式(TileMode)。与tileX同理,不再赘述。