本文實例為大家分享了Android Studio實現帶邊框的圓形頭像的具體代碼,供大家參考,具體內容如下
效果顯示:
(沒有邊框的)
	
(有邊框的)
	
1、創建自定義ImagView控件
(1)、沒有邊框的
package chenglong.activitytest.pengintohospital.utils;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * * 圓形圖片 * Created by LICHENGLONG on 2017-10-09. */public class mine_ImageViewPlus extends ImageView{ private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG); private Bitmap mRawBitmap; private BitmapShader mShader; private Matrix mMatrix = new Matrix(); private float mBorderWidth = dip2px(15); private int mBorderColor = 0x80bebebe; public mine_ImageViewPlus(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { Bitmap rawBitmap = getBitmap(getDrawable()); if (rawBitmap != null){  int viewWidth = getWidth();  int viewHeight = getHeight();  int viewMinSize = Math.min(viewWidth, viewHeight);  float dstWidth = viewMinSize;  float dstHeight = viewMinSize;  if (mShader == null || !rawBitmap.equals(mRawBitmap)){  mRawBitmap = rawBitmap;  mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);  }  if (mShader != null){  mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());  mShader.setLocalMatrix(mMatrix);  }  mPaintBitmap.setShader(mShader);  mPaintBorder.setStyle(Paint.Style.STROKE);  mPaintBorder.setStrokeWidth(mBorderWidth);  mPaintBorder.setColor(mBorderColor);  float radius = viewMinSize / 2.0f;  canvas.drawCircle(radius, radius, radius - mBorderWidth / 2.0f, mPaintBorder);  canvas.translate(mBorderWidth, mBorderWidth);  canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius - mBorderWidth, mPaintBitmap); } else {  super.onDraw(canvas); } } private Bitmap getBitmap(Drawable drawable){ if (drawable instanceof BitmapDrawable){  return ((BitmapDrawable)drawable).getBitmap(); } else if (drawable instanceof ColorDrawable){  Rect rect = drawable.getBounds();  int width = rect.right - rect.left;  int height = rect.bottom - rect.top;  int color = ((ColorDrawable)drawable).getColor();  Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(bitmap);  canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));  return bitmap; } else {  return null; } } private int dip2px(int dipVal) { float scale = getResources().getDisplayMetrics().density; return (int)(dipVal * scale + 0.5f); }}(2)、有邊框的
package chenglong.activitytest.pengintohospital.utils;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;/** * * 帶邊框的圓形圖片 * Created by LICHENGLONG on 2017-10-09. */public class ImageViewPlus extends ImageView{ private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG); private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);// private Bitmap mRawBitmap; private BitmapShader mShader; private Matrix mMatrix = new Matrix(); private float mBorderWidth = dip2px(15); private int mBorderColor = 0xFF0080FF;//外邊框的顏色 public ImageViewPlus(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { Bitmap rawBitmap = getBitmap(getDrawable()); if (rawBitmap != null){  int viewWidth = getWidth();  int viewHeight = getHeight();  int viewMinSize = Math.min(viewWidth, viewHeight);  float dstWidth = viewMinSize;  float dstHeight = viewMinSize;  if (mShader == null || !rawBitmap.equals(mRawBitmap)){  mRawBitmap = rawBitmap;  mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);  }  if (mShader != null){  mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());  mShader.setLocalMatrix(mMatrix);  }  mPaintBitmap.setShader(mShader);  mPaintBorder.setStyle(Paint.Style.STROKE);  mPaintBorder.setStrokeWidth(mBorderWidth / 5.0f);//外邊框的大小  mPaintBorder.setColor(mBorderColor);//添加外邊框  float radius = viewMinSize / 2.0f;  canvas.drawCircle(radius, radius, radius - mBorderWidth / 6.0f, mPaintBorder);  canvas.translate(mBorderWidth, mBorderWidth);  canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius, mPaintBitmap); } else {  super.onDraw(canvas); } } private Bitmap getBitmap(Drawable drawable){ if (drawable instanceof BitmapDrawable){  return ((BitmapDrawable)drawable).getBitmap(); } else if (drawable instanceof ColorDrawable){  Rect rect = drawable.getBounds();  int width = rect.right - rect.left;  int height = rect.bottom - rect.top;  int color = ((ColorDrawable)drawable).getColor();  Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(bitmap);  canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));  return bitmap; } else {  return null; } } private int dip2px(int dipVal) { float scale = getResources().getDisplayMetrics().density; return (int)(dipVal * scale + 0.5f); }}2、創建頁面xml代碼
<chenglong.activitytest.pengintohospital.utils.ImageViewPlus android:id="@+id/mine_iv_headportrait" android:layout_width="150dp" android:layout_height="150dp" android:src="@mipmap/hospital" />
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答