1、首先看一下实现效果


2、首先新建一个自定义view实现ImageView,详细可看注释

package com.example.a550211.xfermode;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.view.View;import android.widget.ImageView;/** * Created by 550211 on 2017/9/23. */public class MyImageView extends ImageView {    private Paint mPaint;//设置画笔    private Bitmap mBitmap;//获取图片资源    private int width, height;//获取控件宽高    private int mOuterRing = 0;//设置外圈大小    private int outerRingAlpha = 30;//设置外圈透明度    private int color = Color.BLUE;//设置外圈颜色    public MyImageView(Context context) {        this(context, null);    }    public MyImageView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        mPaint = new Paint();    }    public Bitmap getBitmap() {        return mBitmap;    }    public void setBitmap(Bitmap bitmap) {        this.mBitmap = bitmap;    }    public int getmOuterRing() {        return mOuterRing;    }    public void setmOuterRing(int mOuterRing) {        this.mOuterRing = mOuterRing;    }    public int getColor() {        return color;    }    public void setColor(int color) {        this.color = color;    }    public int getOuterRingAlpha() {        return outerRingAlpha;    }    public void setOuterRingAlpha(int outerRingAlpha) {        this.outerRingAlpha = outerRingAlpha;    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        //获取空间宽高        width = View.getDefaultSize(getMeasuredWidth(), widthMeasureSpec);        height = View.getDefaultSize(getMeasuredHeight(), heightMeasureSpec);    }    @Override    protected void onDraw(Canvas canvas) {        Drawable drawable = getDrawable();        Bitmap bitmap;        if (drawable != null) {            if (mBitmap != null) {                bitmap = mBitmap;            } else {                bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);            }            Matrix matrix = new Matrix();            //设置图片缩放比例,            if (mOuterRing>0){                if (width > height) {                    matrix.setScale((float) (height) / bitmap.getHeight(), (float) (height) / bitmap.getHeight());                } else {                    matrix.setScale((float) (width) / bitmap.getWidth(), (float) (width) / bitmap.getWidth());                }            }else {                if (width > height) {                    matrix.setScale((float) (width) / bitmap.getWidth(), (float) (width) / bitmap.getWidth());                } else {                    matrix.setScale((float) (height) / bitmap.getHeight(), (float) (height) / bitmap.getHeight());                }            }            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);            //将图片设置为圆形            bitmap = toRoundBitmap(bitmap);            //当外圈大于0的时候要设置外圈加图片的宽度不能大于控件宽度            if (mOuterRing+bitmap.getWidth()>width){                mOuterRing = (width-bitmap.getWidth())/2;            }            //绘制外圈            Paint cPaint = new Paint();            cPaint.setStrokeWidth(2);            cPaint.setColor(color);            cPaint.setAlpha(outerRingAlpha);           // cPaint.setFilterBitmap(true);            cPaint.setAntiAlias(true);            canvas.drawCircle(bitmap.getWidth()/2+mOuterRing,bitmap.getHeight()/2+mOuterRing,bitmap.getWidth()/2+mOuterRing,cPaint);            //绘制图片            canvas.drawBitmap(bitmap, mOuterRing, mOuterRing, mPaint);        } else {            super.onDraw(canvas);        }    }    /**     * 设置图片为圆形     *     * @param bitmap     * @return     */    public Bitmap toRoundBitmap(Bitmap bitmap) {        int width = bitmap.getWidth();        int height = bitmap.getHeight();        float roundPx;        float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;        if (width <= height) {            roundPx = width / 2;            top = 0;            bottom = width;            left = 0;            right = width;            height = width;            dst_left = 0;            dst_top = 0;            dst_right = width;            dst_bottom = width;        } else {            roundPx = height / 2;            float clip = (width - height) / 2;            left = clip;            right = width - clip;            top = 0;            bottom = height;            width = height;            dst_left = 0;            dst_top = 0;            dst_right = height;            dst_bottom = height;        }        Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(output);        final int color = 0xff424242;        final Paint paint = new Paint();        final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);        final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);        final RectF rectF = new RectF(dst_left, dst_top, dst_right, dst_bottom);        paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        canvas.drawBitmap(bitmap, src, dst, paint);        return output;    }}
2、在布局中使用
 
3、代码中使用

package com.example.a550211.xfermode;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Color;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    private MyImageView imageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aa);        imageView = (MyImageView) findViewById(R.id.MyImageView);        imageView.setBitmap(bitmap);        imageView.setmOuterRing(56);        imageView.setColor(Color.RED);        imageView.setOuterRingAlpha(50);    }}
这样就可以简单实现圆形头像了





更多相关文章

  1. Android(安卓)异步加载一张网络图片
  2. android 字体大小,样式 ,像素的设置
  3. Android(安卓)Design Support Library(一):FloatingActionButton、T
  4. 第一章:初入Android大门(弹出对话框)
  5. android 字体大小像素的设置
  6. Android(安卓)简单录音程序
  7. Ubuntu 下开发 Android(安卓)环境变量设置
  8. android 自定义Dialog设置背景颜色
  9. Android(安卓)---android:autoLink属性

随机推荐

  1. Android(安卓)Google map使用
  2. Android发送post请求
  3. Android中常用的Intent
  4. Android开发推荐资料大合集 【转载自51CT
  5. android常见错误记录--持续更新中
  6. Android(安卓)可运行组件
  7. android获取手机屏幕大小
  8. Android触摸屏事件派发机制详解与源码分
  9. Android(安卓)酒店客房管理简单小程序
  10. Android设置选项开发及自定义Preference