自定义控件一般分为分为4种,继承现有空间的 view 和 viewGoup, 还有就是自定义 view 和 viewGroup,今天我们以第一种情况为例,继承ImageView实现一个圆形图片和矩形圆角图片
第一步: 定义自定义控件继承ImageView类,重写构造方法,一般重新两个就可以了,其他的构造函数我们用不到,构造函数的第三个第四个是
主题
public class RoundImageView extends ImageView {
public RoundImageView(Context context) {
super(context);
}
public RoundImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
第二步: 在values创建attrs.xml 进行自定义属性,我们定义了 圆形 矩形圆角 及 角的度数这几个属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RoundImageView">
<attr name="bordaoRadius" format="dimension"/> <!-- 我们想要的角度 -->
<attr name="type"> <!-- 在这里面定义我们想要的类型 -->
<enum name="round" value="0"/>
<enum name="round" value="1"/>
</attr>
</declare-styleable>
</resources>
第三步 : 我们可以直接在xml布局文件中声明我们的自定义控件了
<?xml version="1.0" encoding="utf-8"?>第四步: 在构造函数中获取我们设置的属性
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.qkhl.mycustomerview.MainActivity">
<com.qkhl.mycustomerview.RoundImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:type="round"
app:bordaoRadius="7dp"/>
</RelativeLayout>
/**
* 圆角大小的默认值