二十六、图形特效处理—Shader

使用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();
    }

效果如图:


你可能感兴趣的:(二十六、图形特效处理—Shader)