1.繼承ImageView方式實現圓角圖片java
使用:android
RoundImageView imageView = (RoundImageView) mView.findViewById(R.id.img_icon); imageView.setRect_adius(300);
佈局文件:canvas
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:imagecontrol="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="@dimen/lyrics_height" android:layout_marginLeft="@dimen/bottom_btn_height" android:layout_marginRight="@dimen/bottom_btn_height" android:background="@color/gainsboro" android:orientation="horizontal" > <包名.RoundImageView android:id="@+id/img_icon" style="@style/RoundImageView" android:scaleType="fitXY" android:src="@drawable/icon_test" imagecontrol:border_inside_color="@color/themewhite" imagecontrol:border_thickness="1dp" /> </LinearLayout>
attr.xml中添加ide
<declare-styleable name="roundedimageview"> <attr name="border_thickness" format="dimension" /> <attr name="border_inside_color" format="color" /> <attr name="border_outside_color" format="color"></attr> </declare-styleable>
RoundImageView.java佈局
public class RoundImageView extends ImageView{ public RoundImageView(Context context) { this(context,null); } public RoundImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RoundImageView(Context context, AttributeSet attrs,int attr) { super(context, attrs); init(); } private final RectF roundRect = new RectF(); public void setRect_adius(float rect_adius) { this.rect_adius = rect_adius; } private float rect_adius = 6; private final Paint maskPaint = new Paint(); private final Paint zonePaint = new Paint(); private void init() { maskPaint.setAntiAlias(true); maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); // zonePaint.setAntiAlias(true); zonePaint.setColor(Color.WHITE); // float density = getResources().getDisplayMetrics().density; rect_adius = rect_adius * density; } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); int w = getWidth(); int h = getHeight(); roundRect.set(0, 0, w, h); } @Override public void draw(Canvas canvas) { canvas.saveLayer(roundRect, zonePaint, Canvas.ALL_SAVE_FLAG); canvas.drawRoundRect(roundRect, rect_adius, rect_adius, zonePaint); canvas.saveLayer(roundRect, maskPaint, Canvas.ALL_SAVE_FLAG); super.draw(canvas); canvas.restore(); } }