Android 自定义圆角头像
2019-08-05 10:42
51 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014714188/article/details/98479951
Android 自定义圆角头像
在自己项目中新建文件夹views,在该目录下新建类CircleImageView (圆角图片)。
CircleImageView 类的实现如下。
相关注释代码已经标注,可以直接复制即可。
package com.xie.com.imoocmusic.views; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.v7.widget.AppCompatImageView; import android.util.AttributeSet; public class CircleImageView extends AppCompatImageView { private float width; private float height; private float radius; private Paint paint; private Matrix matrix; public CircleImageView(Context context) { this(context, null); } public CircleImageView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(); paint.setAntiAlias(true); //设置抗锯齿 matrix = new Matrix(); //初始化缩放矩阵 } /** * 测量控件的宽高,并获取其内切圆的半径 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); radius = Math.min(width, height) / 2; } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { super.onDraw(canvas); return; } if (drawable instanceof BitmapDrawable) { paint.setShader(initBitmapShader((BitmapDrawable) drawable));//将着色器设置给画笔 canvas.drawCircle(width / 2, height / 2, radius, paint);//使用画笔在画布上画圆 return; } super.onDraw(canvas); } /** * 获取ImageView中资源图片的Bitmap,利用Bitmap初始化图片着色器,通过缩放矩阵将原资源图片缩放到铺满整个绘制区域,避免边界填充 */ private BitmapShader initBitmapShader(BitmapDrawable drawable) { Bitmap bitmap = drawable.getBitmap(); BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); float scale = Math.max(width / bitmap.getWidth(), height / bitmap.getHeight()); matrix.setScale(scale, scale);//将图片宽高等比例缩放,避免拉伸 bitmapShader.setLocalMatrix(matrix); return bitmapShader; } }
在布局中的引用自定义View。
<com.xie.com.imoocmusic.views.CircleImageView android:id="@+id/iv_icon" android:layout_width="56dp" android:layout_height="56dp" android:src="@mipmap/img1"/>
效果如下:
相关文章推荐
- android 自定义圆角头像以及使用declare-styleable进行配置属性解析
- Android自定义ImageView,方角,圆角头像(可根据自己的需求来设定头像的圆角或者方角的大小)
- Android 自定义圆角图片/头像
- Android自定义圆形圆角图片示例
- Android Shape自定义纯色圆角按钮
- android自定义圆形头像view,继承imageview
- Android中ProgressBar自定义进度条的高度、颜色、圆角
- Android自定义圆角/圆形控件
- Android 代码实现自定义圆角背景
- android自定义View 之仿QQ消息头像
- Android imageView 自定义单个或多个角为圆角及圆形图片工具
- Android自定义TextView 自定义设置圆角背景色
- Android中自定义圆角样式
- 【Android开源项目分析】自定义圆形头像CircleImageView的使用和源码分析
- Android实现自定义ImageView的圆角矩形图片效果
- Android——EditText自定义边框、圆角和其常用属性总结
- Android中的自定义圆形头像
- Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai
- Android自定义控件之圆形头像
- Android使用BitmapShader图形渲染实现圆形、圆角和椭圆自定义图片View