自定义圆形图片控件

import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * Created by cg on 2015/2/2.
 * 存圆的
 */
public class RoundImageView extends ImageView {

    private Paint mMaskPaint;
    private Path mMaskPath;

    public RoundImageView(Context context) {
        super(context);
        init();
    }

    public RoundImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        mMaskPaint = new Paint();
        mMaskPaint.setAntiAlias(true);
        mMaskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        mMaskPath = new Path();
        setScaleType(ScaleType.CENTER_CROP);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        int width = w - getPaddingLeft() - getPaddingRight();
        int radius = width / 2;
        mMaskPath.reset();
        mMaskPath.addCircle(getPaddingLeft() + radius, getPaddingTop() + radius, radius, Path.Direction.CCW);
        mMaskPath.setFillType(Path.FillType.INVERSE_WINDING);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // 保存当前layer的透明橡树到离屏缓冲区。并新创建一个透明度爲255的新layer
        int saveCount = canvas.saveLayerAlpha(0.0F, 0.0F, canvas.getWidth(), canvas.getHeight(),
                255, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
        super.onDraw(canvas);
        if (mMaskPath != null) {
            canvas.drawPath(mMaskPath, mMaskPaint);
        }
        canvas.restoreToCount(saveCount);
    }
}

 

posted on 2016-02-16 09:40  传统男人  阅读(181)  评论(0编辑  收藏  举报

导航