老套路看图:
实现方法非常简单,使用ClipPath切割就可以了:
完整代码如下:dpUtils工具类就不发了,自己写下吧
import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Path;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.widget.ImageView;import com.gfan.xiayiye5.utils.DpUtils;/*** @author xiayiye5* 11月14日15:21:42* 自定义圆角图片*/@SuppressLint("AppCompatCustomView")public class RadiusImageView extends ImageView {/*** 圆角大小*/private int radiusSize = DpUtils.dip2px(getContext(), 10);public RadiusImageView(Context context) {super(context, null);}public RadiusImageView(Context context, @Nullable AttributeSet attrs) {super(context, attrs, 0);}public RadiusImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {}/*** 设置圆角大小,设置后需要再次刷新下当前view,使用invalidate()或者postInvalidate()刷新都可以的** @param size dp值*/public void setRadiusSize(int size) {radiusSize = DpUtils.dip2px(getContext(), size);invalidate();// postInvalidate();}@Overrideprotected void onDraw(Canvas canvas) {if (getWidth() > radiusSize && getHeight() > radiusSize) {@SuppressLint("DrawAllocation")Path path = new Path();path.moveTo(radiusSize, 0);path.lineTo(getWidth() - radiusSize, 0);path.quadTo(getWidth(), 0, getWidth(), radiusSize);path.lineTo(getWidth(), getHeight() - radiusSize);path.quadTo(getWidth(), getHeight(), getWidth() - radiusSize, getHeight());path.lineTo(radiusSize, getHeight());path.quadTo(0, getHeight(), 0, getHeight() - radiusSize);path.lineTo(0, radiusSize);path.quadTo(0, 0, radiusSize, 0);canvas.clipPath(path);}super.onDraw(canvas);}}
如何使用呢?
在布局中直接使用该控件就可以了:
<!-- 下面的com.gfan.xiayiye5.view.RadiusImageView换成自己路径就好了 --><com.gfan.xiayiye5.view.RadiusImageViewandroid:id="@+id/ivLastLoginId"android:layout_width="50dp"android:layout_height="50dp"android:layout_below="@+id/tvLastLoginId" />
再次非常感谢原博主:博主链接