概述:1.遵循Android标准。2.在XML里面使用定制的样式属性。3.发送可得到的事件。4.与多种Android平台相匹配
使用Android框架创造自己想要的view。
1.创建myView类继承view或者iamgeview,button
2.使用自定义属性初始化view,
2.1定义myView的属性集,在res/values/attrs.xml文件中添加<declare-styleable>,例如
<resources> <declare-styleable name="PieChart"> //这个name一般来说和自己定义的view名称一样 <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
2.2然后在为了能使用自定义的属性集,在布局文件里面添加上命名空间,比如<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">//http://schemas.android.com/apk/res/[your package name] <com.example.customviews.charting.PieChart //在布局文件中使用自定义view时要写上全类名 custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
2.3在自定义的myView类中使用obtainStyledAttributes()方法,得到布局文件中自定义的属性的值,比如public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle();//最后一定要recycle一下 } }
3.在初始化view之后,也可以使用set,get,方法动态的给自定义view设置属性,比如public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; //为了确保改变的属性生效,要及时调用下面两个方法invalidate(); //通知系统,该view要被重新绘制,该方法会调用ondraw()方法requestLayout();//同样的,你需要请求一个新的布局}
4.最后,就是在相应的方法里面加上需要的功能,这个自己看着办了....