android 圆形头像

来源:互联网 发布:手机虚拟视频软件 编辑:程序博客网 时间:2024/06/11 01:39


  本文的源码来自于GitHub:https://github.com/vinc3m1/RoundedImageView。不喜欢看源码的朋友可以直接将下面的代码放到项目中即可。


package com.taihua.ckshop.util;/** * Created by th1 on 2016/11/4. */import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuff.Mode;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;import com.lidroid.xutils.bitmap.core.AsyncDrawable;    public class RoundImageView extends ImageView {    public RoundImageView(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    public RoundImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public RoundImageView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    @Override    protected void onDraw(Canvas canvas) {            Drawable drawable = getDrawable();        if (drawable == null) {            return;        }        if (getWidth() == 0 || getHeight() == 0) {            return;        }        Bitmap b = null;        if(drawable instanceof BitmapDrawable){            b =  ((BitmapDrawable)drawable).getBitmap() ;        }else if(drawable instanceof AsyncDrawable){            b = Bitmap                    .createBitmap(                            getWidth(),                            getHeight(),                            drawable.getOpacity() != PixelFormat.OPAQUE ? Config.ARGB_8888                                    : Config.RGB_565);            Canvas canvas1 = new Canvas(b);            // canvas.setBitmap(bitmap);            drawable.setBounds(0, 0, getWidth(),                    getHeight());            drawable.draw(canvas1);        }//        Bitmap b =  ((BitmapDrawable)drawable).getBitmap();        if(null == b)        {            return;        }        Bitmap bitmap = b.copy(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);        else            sbmp = bmp;        Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),                sbmp.getHeight(), 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(Mode.SRC_IN));        canvas.drawBitmap(sbmp, rect, rect, paint);        return output;    }}



0 0
原创粉丝点击