使用Shader填充图形
Android不仅可以使用颜色来填充图形,也可以使用Shader对象的渲染效果来填充图形。
Shader本身是一个抽象类,它提供了如下实现类:
BitmapShader //使用位图平铺的渲染效果
LinearGradient //使用线性渐变类填充图形
RadialGradient //使用圆形渐变类填充图形
SweepGradient //使用角度渐变类填充图形
ComposeShader //使用组合渲染效果类填充图形
直接上代码看效果:
private ShaderView my_view;
private Shader[] shaders = new Shader[5];
//颜色组
private int colors[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity16);
my_view = findViewById(R.id.my_view);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.switcher3);
//设置渐变颜色组
colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
//x坐标方向重复,y方向镜面
shaders[0] = new BitmapShader(bm, Shader.TileMode.REPEAT,
Shader.TileMode.MIRROR);
shaders[1] = new LinearGradient(0, 0, 100, 100, colors, null, Shader.TileMode.REPEAT);
shaders[2] = new RadialGradient(100, 100, 80, colors, null, Shader.TileMode.REPEAT);
shaders[3] = new SweepGradient(160, 160, colors, null);
shaders[4] = new ComposeShader(shaders[0], shaders[2], PorterDuff.Mode.DARKEN);
}
public void changeShader(View view){
switch (view.getId()){
case R.id.button1:
my_view.paint.setShader(shaders[0]);
break;
case R.id.button2:
my_view.paint.setShader(shaders[1]);
break;
case R.id.button3:
my_view.paint.setShader(shaders[2]);
break;
case R.id.button4:
my_view.paint.setShader(shaders[3]);
break;
case R.id.button5:
my_view.paint.setShader(shaders[4]);
break;
}
//重绘制界面
my_view.invalidate();
}
效果如图: