Android 圆形头像
来源:互联网 发布:高考背单词软件 编辑:程序博客网 时间:2024/06/06 17:18
代码很简单,可以直接复制走。
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.ColorDrawable;import android.graphics.drawable.Drawable;import android.net.Uri;import android.support.annotation.DrawableRes;import android.util.AttributeSet;import android.widget.ImageView;/** * 圆形图片控件 */public class CircleImageView extends ImageView { private Bitmap mBitmap; private BitmapShader mBitmapShader; private Paint paint; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; private static final int COLORDRAWABLE_DIMENSION = 2; public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onDraw(Canvas canvas) { if (mBitmap == null||mBitmapShader == null) { return; } if(mBitmap.getHeight() == 0 || mBitmap.getWidth() == 0) return; updateBitmapShader(); paint.setShader(mBitmapShader); canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, Math.min(getWidth() / 2.0f, getHeight() / 2.0f), paint); } private void init(){ if (mBitmap == null) return; mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint = new Paint(); paint.setAntiAlias(true); } @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); mBitmap = bm; init(); } @Override public void setImageDrawable(Drawable drawable) { super.setImageDrawable(drawable); mBitmap = getBitmapFromDrawable(drawable); init(); } @Override public void setImageResource(@DrawableRes int resId) { super.setImageResource(resId); mBitmap = getBitmapFromDrawable(getDrawable()); init(); } @Override public void setImageURI(Uri uri) { super.setImageURI(uri); mBitmap = uri != null ? getBitmapFromDrawable(getDrawable()) : null; init(); } private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; } if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } try { Bitmap bitmap; if (drawable instanceof ColorDrawable) { bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } catch (Exception e) { e.printStackTrace(); return null; } } private void updateBitmapShader() { if (mBitmap == null) return; int canvasSize = Math.min(getWidth(), getHeight()); if (canvasSize == 0) return; if( canvasSize!= mBitmap.getWidth() || canvasSize != mBitmap.getHeight()) { Matrix matrix = new Matrix(); float scale = (float) canvasSize / (float) mBitmap.getWidth(); matrix.setScale(scale, scale); mBitmapShader.setLocalMatrix(matrix); } }}
0 0
- Android 圆形头像显示
- Android 笔记 - 圆形头像
- android 圆形头像
- Android:圆形头像
- android生成圆形头像
- Android 圆形头像 自己动手
- Android 圆形头像
- Android 绘制圆形头像
- android 圆形头像
- Android头像ImageView圆形
- Android实现圆形头像
- Android自定义圆形头像
- android自定义圆形头像
- Android圆形头像
- Android 自定义圆形头像
- android 圆形头像
- Android自定义圆形头像
- android圆形头像
- zookeer
- windows 下redis在后台运行
- 方法记
- Unity协程以及迭代器
- 魔方第三层
- Android 圆形头像
- mybatis的增删改查
- 【OpenCV学习笔记系列01-OpenCV2.4.6 + VS2010开发环境配置】
- NotePad++ 切换主题和背景
- 设计模式总结
- 排序算法之快速排序java实现
- shell 判断postgresql中用户是否存在?
- iOS学习笔记-004.加法计算器
- Secure CRT 配色方案