android自定义控件系列
2016-06-02 16:01
411 查看
转载自:http://blog.csdn.net/qq_25943493/article/details/51501049
一.基础原理
1.Android自定义控件的三种主要方式为:
1、继承现有控件——重写或者覆盖其中的某些方法,来实现自定义的显示方式或者自定义响应——适用于这种情况:有某个单个的系统控件和你心目中需要的控件很是相似。最最简单的比如你需要一个带有点击特效的按钮;
2、组合现有的控件——利用已有的系统控件来组合出自己的特有控件,完成自己业务需求——适用于这种情况:系统中没有那个控件可以完成我们的需求,但是有两个或几个系统控件组合起来就能达到我们的目的,但是如果每次需要这样的控件就得把多个系统控件组合一次显然浪费太多时间也增加很多重复代码。比如我需要一个带清除按钮的输入框、需要一个带标题栏的图片显示控件…
…等等;
3、全新开发——继承View类开发自己的全新控件——这是最高阶的自定义控件开发方式,适用于这种情况:系统中压根没有类似的控件、或者我们有特殊需求特地不用系统的控件。比如我需要一个显示饼状统计图、需要一个圆形的带数字的进度条、需要一个随机数安全键盘…
…等等。
2.需要准备和了解的知识:
1、什么是View、ViewGroup,以及两者之间的区别和联系。
2、学习一下系统控件的子父类继承关系,比如TextView、ImageView是简单类,直接继承自View;EditText、Button继承自TextView,ImageButton继承自ImageView等(可以把下图保存下来好好看看):
3、了解Android中Touch事件的分发和消费机制
touch事件的分发和消费机制
Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
Android 编程下 Touch 事件的分发和消费机制
4、会用Android画图工具Canvas
5、了解View视图的绘制过程的各个回调函数,知道函数调用顺序,最简单的有onMeasure()对视图进行测量、onLayout()在子视图添加到父视图中时调用、onDraw( )方法中就会用到上边我们要求会用的Canvas工具,进行绘制视图;下边我们附上可能用到的方法:
onMeasure() 检测View组件及其子组件的大小
onLayout() 当该组件需要分配其子组件的位置、大小时
onSizeChange() 当该组件的大小被改变时
onDraw() 当组件将要绘制它的内容时
onKeyDown 当按下某个键盘时
onKeyUp 当松开某个键盘时
onTrackballEvent 当发生轨迹球事件时
onTouchEvent 当发生触屏事件时
onWindowFocusChanged(boolean) 当该组件得到、失去焦点时
onAtrrachedToWindow() 当把该组件放入到某个窗口时
onDetachedFromWindow() 当把该组件从某个窗口上分离时触发的方法
onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发的方法
6、View类以及View子类的三个构造方法的不同作用:
public CircleView(Context context) {
this(context, null);
}
7、会添加自定义回调函数,以便为自己的控件添加一些自定义事件的响应。
(1) 在res/values目录下建立一个attrs.xml的文件,在这个文件中增加对控件的自定义属性字段和属性数据类型的定义;
(2) 写一个自定义控件类,继承合适的父类,这个类就是你的自定义控件的实现;
(3) 使用带AttributeSet参数的类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来;
(4) 在自定义控件类中使用这些已经连接的属性变量;
(5) 将自定义的控件类声明到布局用的xml文件中去;
(6) 在界面中生成此自定义控件类对象,就完成了自定义控件的创建和使用了。
82d8
一.基础原理
1.Android自定义控件的三种主要方式为:
1、继承现有控件——重写或者覆盖其中的某些方法,来实现自定义的显示方式或者自定义响应——适用于这种情况:有某个单个的系统控件和你心目中需要的控件很是相似。最最简单的比如你需要一个带有点击特效的按钮;
2、组合现有的控件——利用已有的系统控件来组合出自己的特有控件,完成自己业务需求——适用于这种情况:系统中没有那个控件可以完成我们的需求,但是有两个或几个系统控件组合起来就能达到我们的目的,但是如果每次需要这样的控件就得把多个系统控件组合一次显然浪费太多时间也增加很多重复代码。比如我需要一个带清除按钮的输入框、需要一个带标题栏的图片显示控件…
…等等;
3、全新开发——继承View类开发自己的全新控件——这是最高阶的自定义控件开发方式,适用于这种情况:系统中压根没有类似的控件、或者我们有特殊需求特地不用系统的控件。比如我需要一个显示饼状统计图、需要一个圆形的带数字的进度条、需要一个随机数安全键盘…
…等等。
2.需要准备和了解的知识:
1、什么是View、ViewGroup,以及两者之间的区别和联系。
2、学习一下系统控件的子父类继承关系,比如TextView、ImageView是简单类,直接继承自View;EditText、Button继承自TextView,ImageButton继承自ImageView等(可以把下图保存下来好好看看):
3、了解Android中Touch事件的分发和消费机制
touch事件的分发和消费机制
Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
Android 编程下 Touch 事件的分发和消费机制
4、会用Android画图工具Canvas
5、了解View视图的绘制过程的各个回调函数,知道函数调用顺序,最简单的有onMeasure()对视图进行测量、onLayout()在子视图添加到父视图中时调用、onDraw( )方法中就会用到上边我们要求会用的Canvas工具,进行绘制视图;下边我们附上可能用到的方法:
onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后调用的方法
onMeasure() 检测View组件及其子组件的大小
onLayout() 当该组件需要分配其子组件的位置、大小时
onSizeChange() 当该组件的大小被改变时
onDraw() 当组件将要绘制它的内容时
onKeyDown 当按下某个键盘时
onKeyUp 当松开某个键盘时
onTrackballEvent 当发生轨迹球事件时
onTouchEvent 当发生触屏事件时
onWindowFocusChanged(boolean) 当该组件得到、失去焦点时
onAtrrachedToWindow() 当把该组件放入到某个窗口时
onDetachedFromWindow() 当把该组件从某个窗口上分离时触发的方法
onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发的方法
6、View类以及View子类的三个构造方法的不同作用:
public CircleView(Context context) {
this(context, null);
}
public CircleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } 在代码里用new动态创建对象的话一般用一个参数的;写在xml里的调用2个参数的attr里边传过来的是 xml里边对应的height width等参数,包括自己定义的参数,如果在xml里边写入自定义控件的话 必须要重写2个参数的构造函数;第3个参数不熟,传style的吧貌似。
7、会添加自定义回调函数,以便为自己的控件添加一些自定义事件的响应。
(1) 在res/values目录下建立一个attrs.xml的文件,在这个文件中增加对控件的自定义属性字段和属性数据类型的定义;
(2) 写一个自定义控件类,继承合适的父类,这个类就是你的自定义控件的实现;
(3) 使用带AttributeSet参数的类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来;
(4) 在自定义控件类中使用这些已经连接的属性变量;
(5) 将自定义的控件类声明到布局用的xml文件中去;
(6) 在界面中生成此自定义控件类对象,就完成了自定义控件的创建和使用了。
82d8
相关文章推荐
- Android 使用EventBus实现菜单
- 重启android盒子
- [Android Studio系列(五)] Android Studio手动配置Gradle的方法
- android 开发环境搭建
- 解决android sdk 无法更新
- Android进程和线程
- Android Studio中AIDL使用方法
- 实现新浪微博第三方登录获取用户信息
- android-----Volley框架使用ImageLoader加载图片源码分析
- Android实现顶部导航菜单左右滑动效果
- 【Android新手笔记六】从服务器获取列表
- 基于IJKDanmakuFlameMaster的android 弹幕接入
- Android中如何gone掉列表中的任意一条数据
- getBackground().setAlpha所导致问题
- Android adb logcat输出日志显示不全解决方案
- android Html5学习代码
- android 对线程池的探究
- 转:android git开源项目列表
- Android Studio默认快捷键大全
- HAL开发全流程(二)