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
原创粉丝点击