1 public class RoundImageView extends ImageView { 2 private Paint paint; 3 private int roundWidth = 50; 4 private int roundHeight = 50; 5 private Paint paint2; 6 7 public RoundImageView(Context context, AttributeSet attrs, int defStyle) { 8 super(context, attrs, defStyle); 9 init(context, attrs); 10 } 11 12 public RoundImageView(Context context, AttributeSet attrs) { 13 super(context, attrs); 14 init(context, attrs); 15 } 16 17 public void SetRoundValue(float roundValue) { 18 roundWidth = (int) roundValue; 19 roundHeight = (int) roundValue; 20 } 21 22 public RoundImageView(Context context) { 23 super(context); 24 init(context, null); 25 } 26 27 @SuppressLint("Recycle") 28 private void init(Context context, AttributeSet attrs) { 29 30 if (attrs != null) { 31 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundAngleImageView); 32 roundWidth = a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundWidth, roundWidth); 33 roundHeight = a.getDimensionPixelSize(R.styleable.RoundAngleImageView_roundHeight, roundHeight); 34 } else { 35 float density = context.getResources().getDisplayMetrics().density; 36 roundWidth = (int) (roundWidth * density); 37 roundHeight = (int) (roundHeight * density); 38 } 39 40 paint = new Paint(); 41 paint.setColor(Color.WHITE); 42 paint.setAntiAlias(true); 43 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 44 45 paint2 = new Paint(); 46 paint2.setXfermode(null); 47 } 48 49 @Override 50 public void draw(Canvas canvas) { 51 Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888); 52 Canvas canvas2 = new Canvas(bitmap); 53 super.draw(canvas2); 54 drawLiftUp(canvas2); 55 drawRightUp(canvas2); 56 drawLiftDown(canvas2); 57 drawRightDown(canvas2); 58 canvas.drawBitmap(bitmap, 0, 0, paint2); 59 bitmap.recycle(); 60 bitmap = null; 61 } 62 63 private void drawLiftUp(Canvas canvas) { 64 Path path = new Path(); 65 path.moveTo(0, roundHeight); 66 path.lineTo(0, 0); 67 path.lineTo(roundWidth, 0); 68 path.arcTo(new RectF(0, 0, roundWidth * 2, roundHeight * 2), -90, -90); 69 path.close(); 70 canvas.drawPath(path, paint); 71 } 72 73 private void drawLiftDown(Canvas canvas) { 74 Path path = new Path(); 75 path.moveTo(0, getHeight() - roundHeight); 76 path.lineTo(0, getHeight()); 77 path.lineTo(roundWidth, getHeight()); 78 path.arcTo(new RectF(0, getHeight() - roundHeight * 2, 0 + roundWidth * 2, getWidth()), 90, 90); 79 path.close(); 80 canvas.drawPath(path, paint); 81 } 82 83 private void drawRightDown(Canvas canvas) { 84 Path path = new Path(); 85 path.moveTo(getWidth() - roundWidth, getHeight()); 86 path.lineTo(getWidth(), getHeight()); 87 path.lineTo(getWidth(), getHeight() - roundHeight); 88 path.arcTo(new RectF(getWidth() - roundWidth * 2, getHeight() - roundHeight * 2, getWidth(), getHeight()), 0, 89 90); 90 path.close(); 91 canvas.drawPath(path, paint); 92 } 93 94 private void drawRightUp(Canvas canvas) { 95 Path path = new Path(); 96 path.moveTo(getWidth(), roundHeight); 97 path.lineTo(getWidth(), 0); 98 path.lineTo(getWidth() - roundWidth, 0); 99 path.arcTo(new RectF(getWidth() - roundWidth * 2, 0, getWidth(), 0 + roundHeight * 2), -90, 90); 100 path.close(); 101 canvas.drawPath(path, paint); 102 } 103 104 }