Android控件---Android群英传记录

来源:互联网 发布:士兵伙食知乎 编辑:程序博客网 时间:2024/06/04 17:53

主要有ViewGroup控件和View控件
View的测量,提供 MeasureSpec类,在onMeasure()方法中进行, MeasureSpec是一个32位的int值,高2位为测量模式,低30位为测量大小。
测量模式3种
EXACILY 精确模式 指定值或match_parent 默认
AT_MOST 最大值模式 wrap_conent
UNSPECIFIED 不指定模式,通常在自定义View使用
View的绘制 重写onDraw()方法,Canvas对象上绘制所需要的图形 Canavas canvas = new Canvas(bitmap);bitmap是用来储存绘制在Canvas上的像素信息。
ViewGroup的测量 遍历所有子View来确定自己的大小,在自定义ViewGroup时,通常会重写onLayout()方法控制其子View显示位置的逻辑。
ViewGroup的绘制会使用dispatchDraw()方法绘制其子View
自定义View
比较重要的回掉方法:
onFinishInflate();从XML加载组件后回掉
onSizeChanged():组件大小改变时
onMeasure(): 进行测量
onLayout: 确定显示的位置
onTouchEvent():监听到触摸事件时
三种实现自定义控件的方法
对现有控件进行拓展
一般在onDraw()方法中,在super.onDraw(canvas)回掉方法前实现自己的逻辑,对原控件来说就是绘制前。
通过组合来实现新的控件 引入自定义属性,addView()方法将其他控件加到模板中。因为每个调用者需要的功能不一样,需通过接口回掉的思想将具体实现逻辑交给调用者。
重写View来实现全新的控件 难点在于绘制控件和实现交互。继承View类,并重写onDraw()、onMeasure()等方法实现绘制逻辑,重写onTouchEvent()等触控事件来实现交互逻辑。
(调用invalidate()通知View进行重绘,太快。调用postInvalidateDelayed(300)进行View的延迟重绘。)
自定义ViewGroup
需要重写onMeasure()方法来对子View进行测量,重写onLayout()方法确定子View的位置,重写onTouchEnvent()方法增加响应事件。

0 0
原创粉丝点击