1.继承ImageView方式实现圆角图片
使用:
RoundImageView imageView = (RoundImageView) mView.findViewById(R.id.img_icon);
imageView.setRect_adius(300);
布局文件:
<?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中添加
<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();
}
}