网上有很多文章讲这个,不过很多都有问题,下面是我整理的
http://blog.csdn.net/jdsjlzx/article/details/43452927
基本是按照这个来写,有一点问题是添加的是attrs.xml不是attr.xml
最后处理完Typedarray后要调用resycle() 原因见:http://www.cnblogs.com/kissazi2/p/4049982.html
中途出现过的问题:
1.error: No resource identifier found for attribute 'fadeType' in package 'com.smk.svgimage'
在布局文件中的命名空间出错,com.smk.svgimage是自定义控件所在包,而应该改成com.smk.svgviewdemo即MainActivity.java所在包,意思应该是res下的资源文件都是相对主包来说的(额意会),生成的R.java也是在包含MainActivity.java的包下,就像其他包中的java代码无法直接用R.id.xxx引用资源文件一样
2.在获取自定义的属性值时,总是读不出来
int fadeType = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/com.smk.svgviewdemo", "fadeType", FADE_NEVER);//失败
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.SvgView);
int fadeType = a.getInt(R.styleable.SvgView_fadeType, FADE_NEVER);
a.recycle();
得这样取值,具体原理没去查,暂时先放着吧
顺带一提,添加attrs.xml的方法我总觉得麻烦,只图简单的话,在布局文件里直接用attsXX="" 然后取值的时候int attsXX = attrs.getAttributeIntValue(null, "attsXX",defaultvalue);
当然咯这样非常不符合规范,看着用咯