android 圆角ImageView类,可设置弧度

  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 }

 

你可能感兴趣的:(imageview)