这次带来一个继承ImageView控件,可以显示圆形,也可以显示圆角矩形,并且可以指定任意一个角为圆角。口说无凭,先来看一下效果吧。
说起来这控件原本是在我刚学android的时候,为了实现圆形图片的效果在网上找,并且一直在用,后来在一个项目里有个图片
左上角和左下角是圆角,两外两个角不是圆角的设计,我就在这基础上改了一下,就是现在的这个控件。由于年代太久远加之我
改动得比较多,原博主的博客找不着了,非常抱歉。
又废话了一大堆,赶紧上源码吧。
首先控件支持直接在布局文件里设置属性,所以我们需要先自定义一些属性资源。在values文件夹下的attrs.xml文件(如果没有
就自己新建一个)里,添加如下代码:
<declare-styleable name="RoundImageView">
<attr name="type" />
<attr name="scale" />
<attr name="borderRadius" />
<attr name="top_left" />
<attr name="top_right" />
<attr name="bottom_left" />
<attr name="bottom_right" />
</declare-styleable>
<attr name="borderRadius" format="dimension" />
<attr name="type">
<enum name="circle" value="0" />
<enum name="round" value="1" />
</attr>
<attr name="scale">
<enum name="crop" value="0" />
<enum name="fit" value="1" />
</attr>
<attr name="top_left" format="boolean" />
<attr name="top_right" format="boolean" />
<attr name="bottom_left" format="boolean" />
<attr name="bottom_right" format="boolean" />
然后就可以上控件本体了,控件名叫RoundImageView,如下:
RoundImageView.java:
public class RoundImageView extends ImageView {
public static final int TYPE_CIRCLE = 0;
public static final int TYPE_ROUND = 1;
public static final int SCALE_TYPE_CROP = 0;
public static final int SCALE_TYPE_FIT = 1;
private static final int BODER_RADIUS_DEFAULT = 10;
private static final String STATE_INSTANCE = "state_instance";
private static final String STATE_TYPE = "state_type";
private static final String STATE_BORDER_RADIUS = "state_border_radius";
// 左上角是否为圆角
private boolean corners_top_left = true;
// 右上角是否为圆角
private boolean corners_top_right = true;
// 左下角是否为圆角
private boolean corners_bottom_left = true;
// 右下角是否为圆角
private boolean corners_bottom_right = true;
// 显示类型,可选项:圆形,圆角矩形
private int type = TYPE_CIRCLE;
// 填充类型,可选项:充满,剪裁
private int