android中实现图片圆形效果
话不多说,先上效果:
实现逻辑:
这里参考的博文【原文】
圆形图片色实现是通过自定义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中实现图片圆形效果相关推荐
- Android中RatingBar的自定义效果
Android中RatingBar的自定义效果 有时候android系统提供给我们的ratingbar效果并不达到我们的要求,这个时候就可以自定义自己喜欢的ratingbar. 从上面的效果可以看出, ...
- Android中的图片加载
Android中的图片加载所出现的问题 在Android的开发中,经常需要去加载图片,但是图片的尺寸有时候往往会很大,而我们的内存是有限的,加载进来的时候很有可能会造成内存溢出,这种结果也是我们不想看 ...
- 浅谈android中的图片处理之基本绘图(一)
从今天开始我来聊下关于android中的图片处理以及android中绘图的基本用法.大家都知道android中的图片的巧妙使用会给UI得到一个很好的用户体验.所以掌握处理图片的基本技巧很是重要.那就开 ...
- android中设置Animation 动画效果
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
- Android 中定义图片的资源文件
---恢复内容开始--- Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中 ...
- 【Android】Android 中定义图片的资源文件
Android中定义图片的Id数组可以在java代码中直接通过new定义,之后使用,还有一种方法是在xml资源文件中直接定义,然后再java代码中通过函数可以获取xml代码中定义的资源文件.当然第二中 ...
- 微信小程序手把手教你实现类似Android中ViewPager控件效果
微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...
- android图片美化开源,GitHub - xingxing-yan/BLImage: Android中美化图片的库。功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能...
BLImage Android中美化图片的库.功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能 效果图 添加依赖: 在project的build.gradle中添加: allp ...
- Android中对图片的内存优化方法
Android 中对于图片的内存优化方法 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource.BitmapFactory.decodeResourc ...
- android drawerlayout侧滑菜单,Android中drawerlayout侧滑菜单效果的实现
众所周知,Android中drawerlayout侧滑菜单是一个很常见的功能,而我们大多数人都是使用slidengmenu作为一个开源框架,下面爱站技术频道小编给大家介绍Android中drawerl ...
最新文章
- VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络
- C#7.0连接MySQL8.0数据库的小笔记
- C#链接数据库增删改查的例子
- Spring系列(六):@Conditional注解用法介绍
- 企业案例(二):增量恢复案例
- eclipse中添加插件的方法
- php ajax国家时间,php ajax 实时显示时间
- HDU各种考试题题解
- c语言 万年历实验流程图,万年历算法(万年历算法流程图)
- landsat8数据下载相关小知识
- 易管家服装进销存 v1.0 下载
- Java 动手写爬虫: 三、爬取队列
- 02_泰坦尼克号幸存者分析(上)
- mac 修改idea 占用内容_mac 上 Idea 运行时占满 CPU怎么解决?
- [离散数学]命题逻辑P_7:范式
- mongoDB百度脑图总结
- 匹马抢三关:讯飞翻译机3.0的破障之战
- 快速下载软件安装包IDM+KinhDown
- 当配置微信网页授权域名出现下载的文件不匹配的问题
- LTspice入门使用教程(导入元器件电压电流波形幅频特性曲线)