你不知道的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绘图之Shader Shader是绘图过程中的着色器,它有五个子类: BitmapShader Co...
    lavor阅读 15,415评论 3 62
  • 系列文章之 Android中自定义View(一)系列文章之 Android中自定义View(二)系列文章之 And...
    YoungerDev阅读 2,238评论 0 4
  • 我不知道你在经历什么 但是你想我忘记你 一定有你深思熟虑后的理由 我不会忘记你,我会放下你 我走了,如果和你一起的...
    叹叹叹息阅读 286评论 0 0
  • SFINAE 技术,即匹配失败不是错误,英文Substitution Failure Is Not An Erro...
    小聪明李良才阅读 17,314评论 1 6
  • 如今这个时代,大家一个两个貌似都很欣赏高冷性格的美男美女们。 什么冰山爱豆,冰山总裁,冰山老板BOSS,高冷校草,...
    有鱼姑娘阅读 2,958评论 0 3