一、Android 窗口与View管理(16篇)
《Android invalidate流程分析-图文》
《Andorid Invalidate 引发的思考》
《Android invalidate学习使用的例子》
《Android 使用dmeo和源码分析invalidate流程》
《Android 使用Scroller自动滚动第一种实现》
《Android 使用Scroller自动滚动第二种实现》
《从源码分析ScrollBy和ScrollTo仅执行onDraw方法》
《Android View.scrollTo, View.scrollBy控制视图滚动原理》
二、触摸事件学习(13篇)
《Android Touch Event接收并传递给Activity》
《Android Touch事件学习 - 修改MotionEvent的值》
《Android Touch相关资料收集-》
三、ListView控件学习(8篇)
1. ListView简单使用
《ListView setAdapter has already been called 异常》
《Android ListView HeaderView和FooterView引出的Position问题》
2. ListView基于源码简单分析原理
《Android ListView使用Holder优化原理》
《Android ListView itemType使用Holder原理简单分析》
《Android ListView onTouchEvent源码分析》
《Android ListView滚动scroll ,快速滑动fling 原理》
《Android ListVIew Touch,click ,longclick, foucs之间的关系》
一、事件机制
事件有很多种: 按(物理)键事件、滚轮事件、触摸事件 【都是靠消息驱动】
提出问题:手指在屏幕上点击
1. 屏幕 - WindowManagerService (InputReader、InputDispatcher) - Activity
2. ViewGroup 与View之分
3. 传递方式:首先隧道方式(向下)查找触摸事件在哪个视图内,之后再冒泡方式(向上)传递处理情况。
dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent
二、触发刷新视图诱因
大小、位置、内容改变
requestLaout、invalidate等
三、Measure
1. 本质:把相对的值转换为具体值。多大范围展示,Canvas是无穷大的。视图的大小由父视图与子视图共同决定。
2. 属性:width、height - 来自 - LayoutParams , 可以有4种类型的值wrap_content, match_parent, fill_parent
3, onMeasure方法的两个参数类型 MeasureSpec 封装父视图传递给子视图的规格
4. MeasureSpec 有三个常用方法:
getMode、getSize、makeMeasureSpec
5. 有三种模式:
unspecified 未制定大小
exactly 固定大小
at_most 最大可设置大小
6. ViewRoot.performTranversal() -> host.measure()
7. 处理Margin
8. 由上至下逐层测量大小。
for (int i=0; i < getChildCount(); i++) {
view.onMeasure();
}
四、 Layout
1. 目的:摆放什么位置(将视图放到合适的位置)
2. 区别:getMeasureWidth 与 getWidth
onLayout参数 left, top, right,bottom由来
3. 步骤:
位置是否发生变化
回调onLayout
消除LAYOUT_REQUTRED
由上至下逐层设置位置
for (int i=0; i < getChildCount(); i++) {
view.onLayout();
}
五、Draw
目的:显示出来让用户能看到,动画与视图
draw方法做的事情:
1. backgroud
2. fading
3. View‘s content
4. draw children
5. fading edges
6. scrollbars
ViewGroup.dispatchDraw
drawChild
draw
onDraw