话不多说,先上效果:

实现逻辑:
这里参考的博文【原文】
圆形图片色实现是通过自定义ImageRound来的,主要是在onDraw()方法中实现绘制圆形图片,在onMeasure()中测量圆形的半径并设置View的宽高。代码如下:

public class ImageRound extends androidx.appcompat.widget.AppCompatImageView {//画笔private Paint mPaint;//圆形图片半径private int mRadius;//圆形的缩放比例private float mScale;public ImageRound(Context context) {super(context);}public ImageRound(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}public ImageRound(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);//由于是圆形,宽高应保持一致int size = Math.min(getMeasuredWidth(),getMeasuredHeight());mRadius = size / 2;setMeasuredDimension(size,size);}@Overrideprotected void onDraw(Canvas canvas) {mPaint = new Paint();Drawable drawable = getDrawable();if(drawable !=null){Bitmap bitmap = drawableToBitmap(getDrawable());//初始化BitmapShader,传入bitmap对象BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);//计算缩放比例mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(),bitmap.getWidth());Matrix matrix = new Matrix();matrix.setScale(mScale,mScale);bitmapShader.setLocalMatrix(matrix);mPaint.setShader(bitmapShader);//画圆形,指定好坐标,半径,画笔canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);}else{super.onDraw(canvas);}}/*** 写一个drawble转BitMap的方法* @param drawable* @return*/private Bitmap drawableToBitmap(Drawable drawable) {if (drawable instanceof BitmapDrawable) {BitmapDrawable bd = (BitmapDrawable) drawable;return bd.getBitmap();}int w = drawable.getIntrinsicWidth();int h = drawable.getIntrinsicHeight();Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, w, h);drawable.draw(canvas);return bitmap;}

然后在页面上使用

<com.example.chunjiafu.ImageRoundandroid:src="@drawable/indexgoods4"android:layout_marginTop="30dp"android:layout_gravity="center"android:scaleType="centerCrop"android:layout_width="150dp"android:layout_height="150dp"/>

需要注意的是,如果是设置background的话图片是不会出现圆形效果的

android中实现图片圆形效果相关推荐

  1. Android中RatingBar的自定义效果

    Android中RatingBar的自定义效果 有时候android系统提供给我们的ratingbar效果并不达到我们的要求,这个时候就可以自定义自己喜欢的ratingbar. 从上面的效果可以看出, ...

  2. Android中的图片加载

    Android中的图片加载所出现的问题 在Android的开发中,经常需要去加载图片,但是图片的尺寸有时候往往会很大,而我们的内存是有限的,加载进来的时候很有可能会造成内存溢出,这种结果也是我们不想看 ...

  3. 浅谈android中的图片处理之基本绘图(一)

    从今天开始我来聊下关于android中的图片处理以及android中绘图的基本用法.大家都知道android中的图片的巧妙使用会给UI得到一个很好的用户体验.所以掌握处理图片的基本技巧很是重要.那就开 ...

  4. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  5. Android 中定义图片的资源文件

    ---恢复内容开始--- Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中 ...

  6. 【Android】Android 中定义图片的资源文件

    Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中定义的资源文件.当然第二中 ...

  7. 微信小程序手把手教你实现类似Android中ViewPager控件效果

    微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...

  8. android图片美化开源,GitHub - xingxing-yan/BLImage: Android中美化图片的库。功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能...

    BLImage Android中美化图片的库.功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能 效果图 添加依赖: 在project的build.gradle中添加: allp ...

  9. Android中对图片的内存优化方法

    Android 中对于图片的内存优化方法 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource.BitmapFactory.decodeResourc ...

  10. android drawerlayout侧滑菜单,Android中drawerlayout侧滑菜单效果的实现

    众所周知,Android中drawerlayout侧滑菜单是一个很常见的功能,而我们大多数人都是使用slidengmenu作为一个开源框架,下面爱站技术频道小编给大家介绍Android中drawerl ...

最新文章

  1. VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络
  2. C#7.0连接MySQL8.0数据库的小笔记
  3. C#链接数据库增删改查的例子
  4. Spring系列(六):@Conditional注解用法介绍
  5. 企业案例(二):增量恢复案例
  6. eclipse中添加插件的方法
  7. php ajax国家时间,php ajax 实时显示时间
  8. HDU各种考试题题解
  9. c语言 万年历实验流程图,万年历算法(万年历算法流程图)
  10. landsat8数据下载相关小知识
  11. 易管家服装进销存 v1.0 下载
  12. Java 动手写爬虫: 三、爬取队列
  13. 02_泰坦尼克号幸存者分析(上)
  14. mac 修改idea 占用内容_mac 上 Idea 运行时占满 CPU怎么解决?
  15. [离散数学]命题逻辑P_7:范式
  16. mongoDB百度脑图总结
  17. 匹马抢三关:讯飞翻译机3.0的破障之战
  18. 快速下载软件安装包IDM+KinhDown
  19. 当配置微信网页授权域名出现下载的文件不匹配的问题
  20. LTspice入门使用教程(导入元器件电压电流波形幅频特性曲线)

热门文章

  1. Python找列表中最大元素的下标
  2. matlab线条不平滑如何滤波,复杂曲线的包络线不平滑
  3. Pseudo Inverse 伪逆
  4. 常用电平转换电路的方法
  5. 【日语口语词典学习】第0002页
  6. sql服务器安全模式怎么修改,SQL Server 安全
  7. 生成对抗网络(六)----------Image Denoising Using a Generative Adversarial Network(用GAN对图像去噪)
  8. 微信小说小程序源码-自带采集带安装教程
  9. 十进制转8421_BCD码
  10. 8421码的加减矫正