Android wants to use the ImageView circular image of avatar , you can define a CircleImageView to inherit the ImageView class, or use the Glide framework to load the ImageView circular image. The two forms are introduced below.
Method 1: Define CircleImageView, inherit the ImageView class
package com.android.presentation.app; import android.annotation.Nullable; 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.util.AttributeSet; import android.widget.ImageView; /** * desc:A simple and efficient circle image * */ public class CircleImageView extends ImageView { 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) { BitmapShader bitmapShader = initBitmapShader((BitmapDrawable) drawable); if(bitmapShader!=null) { paint.setShader(bitmapShader);//将着色器设置给画笔 canvas.drawCircle(width / 2, height / 2, radius, paint); } return; } super.onDraw(canvas); } /** * get bitmap from Imageview */ private BitmapShader initBitmapShader(BitmapDrawable drawable) { Bitmap bitmap = drawable.getBitmap(); if(bitmap==null) { return null; } 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; } }use CircleImageView in xml
<com.android.presentation.app.CircleImageView android:layout_width="100px" android:layout_height="100px" android:scaleType="fitXY" android:layout_marginLeft="100px" android:layout_marginTop="100px" android:src="@drawable/aiqing"/>
Method 2: Use the Glide framework to load the circular avatar image
Glide.with(mContext) .load(R.drawable.aiqing) .apply(RequestOptions.circleCropTransform()) .into(headImg);
The effect as follow:
No comments:
Post a Comment
Note: only a member of this blog may post a comment.