使用Shader填充圖形
Android不僅可以使用顏色來填充圖形犀呼,也可以使用Shader對象的渲染效果來填充圖形。
Shader本身是一個(gè)抽象類蹬蚁,它提供了如下實(shí)現(xiàn)類:
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);
//設(shè)置漸變顏色組
colors = new int[]{Color.RED, Color.GREEN, Color.BLUE};
//x坐標(biāo)方向重復(fù)恃泪,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();
}
效果如圖: