2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > android原生自定义头像View

android原生自定义头像View

时间:2021-12-02 12:17:27

相关推荐

android原生自定义头像View

android原生自定义两种头像方式

第一种、不带圆形外圈头像

package com.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;/**** 圆形图片**/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);}@Overrideprotected 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);}}

第二种、带圆形外圈头像

package com.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;/**** 带边框的圆形图片* */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);}@Overrideprotected 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);}}

第三种、

public class HaedCircleImageView extends ImageView{public HaedCircleImageView(Context context) {super(context);// TODO Auto-generated constructor stub}public HaedCircleImageView(Context context, AttributeSet attrs) {super(context, attrs);}public HaedCircleImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onDraw(Canvas canvas) {Drawable drawable = getDrawable();if (drawable == null) {return;}if (getWidth() == 0 || getHeight() == 0) {return;}Bitmap b = ((BitmapDrawable)drawable).getBitmap() ;Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);int w = getWidth(), h = getHeight();Bitmap roundBitmap = getCroppedBitmap(bitmap, w);canvas.drawBitmap(roundBitmap, 0,0, null);}public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {Bitmap sbmp;if(bmp.getWidth() != radius || bmp.getHeight() != radius)sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);elsesbmp = bmp;Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),sbmp.getHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xffa19774;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());paint.setAntiAlias(true);paint.setFilterBitmap(true);paint.setDither(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(Color.parseColor("#BAB399"));canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,sbmp.getWidth() / 2+0.1f, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(sbmp, rect, rect, paint);return output;}}

在Xml中使用

<com.activitytest.pengintohospital.utils.ImageViewPlusandroid:id="@+id/mine_iv_headportrait"android:layout_width="100dp"android:layout_height="100dp"android:src="@mipmap/hospital" />

- END

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。