美文网首页
二十六、图形特效处理—Shader

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

作者: 清梦星河哈 | 来源:发表于2019-08-01 17:39 被阅读0次
    使用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

          本文链接:https://www.haomeiwen.com/subject/gsbqdctx.html