01_开关_按下关闭时的逻辑
View的行为
-
OnTouchEvent():
-
click,longclick
-
dispatchTouchEvent(): touch分发 是否分发touch事件
-
onInterceptTouchEvent():touch拦截 是否拦截
-
setOnTouchListener(): touch
android希望开发人员封装触摸行为给用户提供交换
View的刷新:
invalidate() --->draw()--->onDraw();
invalidate(): // 触发刷新--主线程调用
postInvalidate(): // 触发刷新--子线程调用
默认的屏幕事件状态
在鼠标按下的时在onTouchEvent()中更改状态
实现
02_开关_按下打开时的逻辑
03_开关_抬起时的逻辑
将down和move合并
up
04_开关_回调接口的实现
-
setXXXListener:设置监听的方法,有提供者创造,用来给使用者提供监听回调
-
提供者 -- onxxxListener
-
提供者 -- 调用接口中的方法
-
使用者 -- 实现接口中的方法
提供者:
使用者:
05_菜单_布局的实现
-
分析
1). 分左右两侧,整体可以滑动
06_菜单_layout部分的介绍
Android之中的view只研究两个级别:父与子的关系
getWidth()和getHeight()
右减左
只有view调用了layout()方法,才能有mRight,mLeft等,才能调用getWidth()
在没有调用layout()之前,可以调用getMeasuredWidth()和getMeasuredHeight()方法
getMeasuredWidth()和getMeasuredHeight()
在setMeasuredDemension()调用之后才能调用,即下调用孩子的measure()方法
07_菜单_左侧的layout和测量
widthMeasureSpec:期望值
-
组成:
32位0101组成
1.头2位:模式
UNSPECIFIED:不确定的,随意
EXACTLY:精确的
AT_MOST:最大的
2.后30位:数值
总之就是在调用getMeasuredWidth之前要调用measure(),其中属性获取
通过初始化时获取getLayoutParams()获取属性值
最后通过MeasureSpec组装,再进行设置
自己就按照期望去设置
08_菜单_右侧布局的实现
09_菜单_scrollTo和scrollBy
滚动API:移动的都是手机屏幕
scrollTo:标准
scrollBy:增量的
10_菜单_滑动的实现
正向滑动,屏幕反向移动
getScrollX() :屏幕左上角相当于主坐标系的位置
11_菜单_up的操作实现
12_菜单_scroller的使用
一个用来模拟数据变化的类
最后加上一个invalidate() --- >这个方法只执行一次
覆盖此方法,本方法也只执行一次,所以递归
13_Touch的传递机制
viewgroup复写了dispatchTouchEvent(由返回值决定是否分发)事件
不分发:返回true
分发:返回false --- > onInterceptTouchEvent() (viewgroup才有,view没有)要不要拦截孩子的touch
不拦截:false
拦截:true
--- > onTouchEvent:是否消费
消费:true 实现触摸逻辑
不消费:false
也就是,只有一个view或者viewgroup能消费;
14_菜单_拦截的处理
拦截,不发给textview,自己消费
在styles裏面添加一個点击事件
15_滑动删除_布局的实现
-
先写content.xml,delete.xml
-
创建SweepView类
-
在把content.xml和delete.xml添加到main.xml的SweepView中
-
完善SweepView类
-
创建两个构造方法,和onLayout(先空实现)
让无参的包含有参的
-
实现onFinishiInflate()获取对象 并 初始化一些变量
-
实现onMeasure()方法:为了能onLayout能调用getMeasuredWidth()方法
测量各个部分,在确定并设置自己高度
-
实现onLayout():对各个部分设置布局
-
16_ViewDragHelper的使用步骤
用来分析touch事件的一个工具类
使用步骤:
-
获取ViewDragHelper实例
ViewDragHelper.create(ViewGroup, ViewDragHelper.Callback);
-
touch分析和监听(托管)
-
实现自己的callBack
17_滑动删除_滑动的实现
自己实现callback
-
down:
tryCaptureView():是否分析view的touch
-
move:
clampViewPositionHorizontal():水平移动的回调
3. up
onViewReleased():松开的
18_滑动删除_边距检测
被点击的控件有两种情况
19_滑动删除_up的实现
20_滑动删除_数据的加载