android BitmapShader实现圆形imageview

待兔 等级 387 0 0

BitmapShader描述:
Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode.
用来将bitmap 绘制为纹理的着色器。通过设置平铺模式,位图可以重复或镜像
BitmapShader是Shader的子类
BitmapShader
ComposeShader
LinearGradient
RadialGradient
SweepGradient

其他之类逐一学习使用..

android   BitmapShader实现圆形imageview

test111.png

这是原图 我们要的效果是这样

android   BitmapShader实现圆形imageview

Screenshot_20170629113943.png

创建一个CircleImageView继承ImageView

主要重写
onDraw
onMeasure
这两个方法

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //取宽度或者高度的最小值
        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
        mRadius = size / 2;
        setMeasuredDimension(size, size);
    } 

private float mScale; private int mRadius; //圆形图片的半径 BitmapShader mBitmapShader; Paint mBitmapPaint; @Override protected void onDraw(Canvas canvas) { //创建一个画笔 mBitmapPaint = new Paint(); //把Drawable转化为Bitmap Bitmap bitmap = getBitmapFromDrawable(getDrawable()); //设置一个BitmapShader //Shader.TileMode.CLAMP 当所画图形的尺寸大于Bitmap的尺寸的时候,会用Bitmap四边的颜色填充剩余空间 //REPEAT 重复平铺整个绘制的区域
//MIRROR 镜像平铺整个绘制的区 mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //计算缩放比例 mScale = ((mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth())); //可以保证显示的时候图片内容照应Shader大小,否者图片显示偏移 Matrix matrix = new Matrix(); matrix.setScale(mScale, mScale); mBitmapShader.setLocalMatrix(matrix); //添加Shader mBitmapPaint.setShader(mBitmapShader); //画圆 canvas.drawCircle(mRadius, mRadius, mRadius, mBitmapPaint);

} 
 private Bitmap getBitmapFromDrawable(Drawable drawable) {
        if (drawable == null) {
            return null;
        }
        if (drawable instanceof BitmapDrawable) {
            return ((BitmapDrawable) drawable).getBitmap();
        }
        Bitmap bitmap;
        bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;

    } 
```  
收藏
评论区

相关推荐

WorkManager 在 Kotlin 中的实践
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。 WorkManager https://developer.android.google.cn/topic/libra
Flutter开发必备Dart基础:Dart快速入门
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货 Jetpack版WanAndroid项目地址:Android Jetpack架构开发组件化应用实战(https://links.jianshu.com/go?tohttps%3A%2F%2Fgithub.com%2Fwinlee28%2FJetpackWanAndroi
js动态生成二维码
需求:项目需要根据链接实时生成二维码,当检测终端是PC时,将当前项目链接生成二维码供用户手机端使用 判断终端是否为mobile function isMobile () { let flag navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile
android BitmapShader实现圆形imageview
BitmapShader描述: Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode. 用来将bitmap 绘制为纹理的着色器。通过设置平铺模式,位图可以重复或镜像 BitmapSha
一文搞懂什么是HTTP与HTTPS
(https://blog.csdn.net/petterp/article/details/102779257)Http与Https的区别。 在最近的开发中,深感网络相关基础知识薄弱,于是趁周末好好总结一
20 张图彻底弄懂 HTTPS 的原理
前言 近年来各大公司对信息安全传输越来越重视,也逐步把网站升级到 HTTPS 了,那么大家知道 HTTPS 的原理是怎样的吗,到底是它是如何确保信息安全传输的?网上挺多介绍 HTTPS,但我发现总是或多或少有些点有些遗漏,没有讲全,今天试图由浅入深地把 HTTPS 讲明白,相信大家看完一定能掌握 HTTPS 的原理,本文大纲如下: HTTP 为什么不安全
Android Service 流程分析
启动Service过程 Android Service启动时序图 (https://imghelloworld.osscnbeijing.aliyuncs.com/039313fdaaf1e7dea3bde222b3ec9934.png) Android Service启动时序图.png 上图就是Android
Android开发 常见异常和解决办法(一)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。 1.Android Studio 3.0及以上版本找不到Android Device Monitor: 解决办法: (1)在Android Studio中打开终端,如下
安卓内存优化
Android内存 1.Android内存分配与回收机制 从Application Framework、Dalvik/Art、Linux内核三个部分来讲解关于Androd内存相关的知识 (1)Application Framework (https://imghelloworld.osscnbeijing.a
Glide4.5分析
Glide4.5分析Glide的基本流程介绍常见调用方式Glide.with(context).load((T)url).into(imageView);这里调用了三个方法 1. With 2. Load 3. Into With方法:首先进入Glide类中调用这个方法javapublic static RequestManage
Android 自学必备网站
一,Android 自学网站给 Android 自学者朋友推荐几个自学网站:1. Android Developers作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会。网站:https://developer.android.com/2. Android专业中文社区Android专业
Django+Vue开发生鲜电商平台之4.Restful API和Vue介绍
也许今天你是最好的,但未必明天还最好;今天也许你是最差的,但社会给了你很多的机会,只要你把握,只要努力,总会有机会。 ——马云Github和Gitee代码同步更新:;。后端架构搭建好之后,需要搭建前端架构。 一、Restful API介绍 1.前后端分离优缺点近年来,随着多种平台类型(PC端、Android端、Mac端、iPhone端、P
Android如何解析json字符串
前言上一篇文章介绍了服务器用Golang如何解析json字符串,今天我们来看看Android客户端是如何解析json字符串的。 正文Golang如何解析post请求中的json字符串(https://www.helloworld.net/p/O917HGeiALU2D)使用java语句如何正确解析json字符串呢?举一个例子,假如我们想从rtc_i
Android AOSP基础(一)VirtualBox 安装 Ubuntu
AOSP基础 Android框架层本文首发于微信公众号「刘望舒」 前言在Android进阶三部曲第二部《Android进阶解密》的第一章,我介绍了两种阅读源码的方式,其中一种是从百度网盘:https://pan.baidu.com/s/1ngsZs 将源码下载下来,然后用SouceInsight来查看,这种方式很便捷,适合去阅读源码,但是有两个弊端,一个是无
https://cloud.tencent.com/developer/article/write/1830331
一、目标今天的目标是这个sign和appcode 二、步骤 Jadx没法上了app加了某梆的企业版,Jadx表示无能为力了。 FRIDADEXDumpDexDump出来,木有找到有效的信息。 Wallbreaker葫芦娃的Wallbreaker可以做些带壳分析,不过这个样本,用Frida的Spawn模式可以载入,Attach模式会失败。而直接用Objecti