版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quanyechacsdn/article/details/78983911
1,创建RoundImageView继承自ImageView或者继承AppCompatImageView
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; import android.util.AttributeSet; import android.support.v7.widget.AppCompatImageView; import com.xhs.sc.R; /** * 圆角ImageView *AppCompatImageView * @author xhs 2017-7 */ public class RoundImageView extends AppCompatImageView { private final RectF roundRect = new RectF(); private float rect_adius = 100; private final Paint maskPaint = new Paint(); private final Paint zonePaint = new Paint(); public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView); //根据属性名称获取对应的值,属性名称的格式为类名_属性名 rect_adius = typedArray.getFloat(R.styleable.RoundImageView_rect_adius, 100f); init(); } public RoundImageView(Context context) { super(context); init(); } 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; } public void setRectAdius(float adius) { rect_adius = adius; invalidate(); } @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(); } }2,自定义View的属性,在values下styles.xml中添加
<declare-styleable name="RoundImageView"> <attr name="rect_adius" format="float" /> </declare-styleable>3,在布局文件中使用
<com.xhs.sc.views.RoundImageView android:id="@+id/item_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerCrop" android:src="@mipmap/everyday_sign_item0" custom:rect_adius="5" /><!--这里rect_adius就是图片的圆角弧度,100或者更高就是圆形了-->4,使用时候 ImageView img = (ImageView)findViewById(R.id.item_img);直接转化为ImageView就行,因为本来就是继承自ImageView的;