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); } }
Imageview上边圆角,下边直角
最新推荐文章于 2022-08-07 14:45:29 发布