Imageview上边圆角,下边直角

来源:互联网 发布:淘宝打不开店铺首页 编辑:程序博客网 时间:2024/03/29 12:46
public class RoundCornerImageView extends ImageView {    private Paint mPaint;    private Paint mPaint2;    private int roundHeight = UIUtils.dip2px(20);    private int roundWidth = UIUtils.dip2px(20);    public RoundCornerImageView(Context context, AttributeSet attrs,                                int defStyle) {        super(context, attrs, defStyle);    }    public RoundCornerImageView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public RoundCornerImageView(Context context) {        super(context);    }    private void init() {        mPaint = new Paint();        mPaint.setColor(Color.WHITE);        mPaint.setAntiAlias(true);        //16种状态        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));        mPaint2 = new Paint();        mPaint2.setXfermode(null);    }    @Override    public void onDraw(Canvas canvas) {        Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);        Canvas canvas2 = new Canvas(bitmap);        super.onDraw(canvas2);        drawLeftUp(canvas2);        drawRightUp(canvas2);//      drawLeftDown(canvas2);//      drawRightDown(canvas2);        canvas.drawBitmap(bitmap, 0, 0, mPaint2);        bitmap.recycle();    }    private void drawLeftUp(Canvas canvas) {        Path path = new Path();        path.moveTo(0, roundHeight);        path.lineTo(0, 0);        path.lineTo(roundWidth, 0);        //arcTo的第二个参数是以多少度为开始点,第三个参数-90度表示逆时针画弧,正数表示顺时针        path.arcTo(new RectF(0,0,roundWidth*2,roundHeight*2),-90,-90);        path.close();        canvas.drawPath(path, mPaint);    }    private void drawLeftDown(Canvas canvas) {        Path path = new Path();        path.moveTo(0, getHeight()-roundHeight);        path.lineTo(0, getHeight());        path.lineTo(roundWidth, getHeight());        path.arcTo(new RectF(0,getHeight()-roundHeight*2,0+roundWidth*2,getHeight()),90,90);        path.close();        canvas.drawPath(path, mPaint);    }    private void drawRightDown(Canvas canvas) {        Path path = new Path();        path.moveTo(getWidth()-roundWidth, getHeight());        path.lineTo(getWidth(), getHeight());        path.lineTo(getWidth(), getHeight()-roundHeight);        path.arcTo(new RectF(getWidth()-roundWidth*2,getHeight()-roundHeight*2,getWidth(),getHeight()), 0, 90);        path.close();        canvas.drawPath(path, mPaint);    }    private void drawRightUp(Canvas canvas) {        Path path = new Path();        path.moveTo(getWidth(), roundHeight);        path.lineTo(getWidth(), 0);        path.lineTo(getWidth()-roundWidth, 0);        path.arcTo(new RectF(getWidth()-roundWidth*2,0,getWidth(),0+roundHeight*2),-90,90);        path.close();        canvas.drawPath(path, mPaint);    }}
阅读全文
0 0