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

简介

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着色器/渲染器)