自定义圆形头像(可多种形状)

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.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.View;

import com.example.admin.listviewdemo.R;

public class newCircle extends View {

    private Bitmap mSourceBitmap;

    PorterDuffXfermode xfermode;
    private Paint paint;

    public newCircle(Context context) {
        this(context, null);
        init();
    }

    public newCircle(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        init();
    }

    public newCircle(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {

        paint=new Paint();
        paint.setAntiAlias(true);//设置抗锯齿
        paint.setStyle(Paint.Style.FILL);//设置填充样式
        paint.setDither(true);//设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
        paint.setFilterBitmap(true);//加快显示速度,本设置项依赖于dither和xfermode的设置
        xfermode=new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);//绘制交集,显示上层
    }

    @Override
    protected void onDraw(Canvas canvas) {

        // 生成圆形Bitmap过程
        mSourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yyy);//从资源文件中解析获取Bitmap
        /**
         * 设置View的离屏缓冲。在绘图的时候新建一个“层”,所有的操作都在该层而不会影响该层以外的图像
         * 必须设置,否则设置的PorterDuffXfermode会无效
         */
        int sc=canvas.saveLayer(0,0,getWidth()*2,getHeight()*2,paint,Canvas.ALL_SAVE_FLAG);

        Matrix matrix = new Matrix();
        float xscal = getWidth()/(1.0f*mSourceBitmap.getWidth());
        float yscal = getHeight()/(1.0f*mSourceBitmap.getHeight());
        float scal = xscal

你可能感兴趣的:(自定义圆形头像(可多种形状))