美文网首页Android知识Android开发Android技术知识
你不知道的Android着色器/渲染器

你不知道的Android着色器/渲染器

作者: Android开发哥 | 来源:发表于2017-03-03 09:07 被阅读499次

    简介

    Android绘图支持里面有有一个叫做Shader的东西,翻译过来就是叫做着色器,渲染器.作用是用来实现一种渐变,渲染的效果,其实就是填充。

    5种Shader

    • BitmapShader //位图
    • LinearGradient //线性
    • RadialGradient //光束
    • SweepGradient //梯度
    • ComposeGradient //混合

    除了BitmapShader之外,其他的真的是产生渐变效果
    BitmapShader则是生成一个图像,类似于Photoshop的图像填充,它的作用是通过PaintCanvas进行制定的Bitmap填充

    3种填充模式

    • CLAMP //拉伸填充
    • REPEAT //横纵向重复填充
    • MIRROR //横向,纵向不断翻转

    既然我们可以选择Bitmap去作为图像填充,那么我们可不可以实现这种圆形头像的效果呢?
    肯定是可以的,我们可以用Bitmap去填充一个圆,在这篇文章的基础上做修改

    修改process函数:

        public void process(View v) {
            Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jpg);
            BitmapShader mBitmapShader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);
            Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mPaint.setShader(mBitmapShader);
            
            Bitmap destBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(destBitmap);
            
            /**
             * 以上设置BitmapShader到Paint里
             * 下面就是使用这个填充去画一个圆
             */
            canvas.drawCircle(mBitmap.getWidth() / 2, mBitmap.getHeight() / 2,
                    (Math.min(mBitmap.getWidth(), mBitmap.getHeight())) / 2, mPaint);
            ((ImageView)
            
            findViewById(R.id.img)).setImageBitmap(destBitmap);
        } 
    

    这是一个应用BitmapShader的小例子,下面的其他几个着色器就等大家动手去做啦.也可以看看这个博客

    参考:Canvas使用7行代码自定义圆形头像

    相关文章

      网友评论

        本文标题:你不知道的Android着色器/渲染器

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