自定义控件
1. 在res->values->attrs.xml中声明你要自定义的属性(如果没有 attrs.xml可以新建一个)
例如这个
其中 <declare-styleable name = ".........">
代指你要自定义属性的组的标题
比如我定义了一个自定义图片的组叫“MyImageView”后面就会引用的这个东西 后面再说
当然你也可以不用写这个东西 但是推荐还是写上毕竟项目不是一个人的项目
<attr name="key" format="内容的格式">
指的的是你这个组下面的包含的属性
#在这给大家整理了format的值
“reference” //引用
“color” //颜色
“boolean” //布尔值
“dimension” //尺寸值
“float” //浮点值
“integer” //整型值
“string” //字符串
“fraction” //百分数,比如200%
枚举型的格式:
< attr name=”orientation”>
< enum name=”horizontal” value=”0” />
< enum name=”vertical” value=”1” />
< /attr>
2. 自定义控件类
比如我我将iamgeview进行了拓展 我就继承了imageView类
然后实现父类的抽象类
一共有4个方法一般推荐 有两个就够了
但是我只用了一个 哈哈
因为只传context 我不知道这么取属性
那么问题来了就算有attrs怎么取属性值
见图
先通过
TypedArraytypedArray=context.obtainStyledAttributes(attrs,R.styleable.MyImageView);
拿到自定义控件的你定义的属性的组就是之前在attrs中写的
<declare-styleable name = ".........">
name属性拿到组之后就可以通过对象把值get出来了比如我要拿到图片的URL
imageUrl = typedArray.getString(R.styleable.MyImageView_ImageUrl);
就可以这么拿了 当然这个只是在xml中设置了这个属相才可以这样拿 要怎么拿这个值之后第3步给大家说
然后也可以在代码中设置这里的属性值
用setImageUrlAndIsAche();方法键入值
这里面用了handler进行了页面刷新(因为这里用了网络获取图片很耗时所以有默认显示的图片)
在这两步我觉得有两个方法大家要注意一下
一个是 invalidate(); 方法 指的是再次绘制这个view
特别声明这个方法是在handler中用的
另一个是recycle();方法
这个方法是在你拿到所有的属性值之后关闭属性对象 让其他人可以用这个属性对象
3. 在xml中引用自定义属性
这里有两个小点一个是
xmlns:myiamgeview="http://schemas.android.com/apk/res/com.example.imagedemo"