- View 基础
- View的位置参数
- View的位置主要由四个顶点决定,四个属性:top left right buttom 。这些坐标都是相对坐标,相对于父容器。left = getLeft()。
- 从3.0开始,增加了几个参数。x y translationX translationY。x = left + translationX。当view向右移动时,left不变,translationX变大,x随之变大。
- MotionEvent 和 TouchSlop
- 按下 : ACTION_DOWN 移动 : ACTION_MOVE 松开 : ACTION_UP
- 通过 MotionEvent 对象获取事件发生的 x y 坐标。 getX() getY() 获取的是相对于当前View的坐标, getRawX() getRawY() 获取相对于左上角的 x y 坐标。
- TouchSlop 是系统能够识别出的滑动的最小距离。ViewConfiguration.get(getContext()).getScaledTouchSlop()。
- VelocityTracker GestureDetector Scroller
- 使用 VelocityTracker 需要注意的是当不需要的时候,需要调用 clear 方法重置并回收内存。
- 为了辅助检测用户的 单击 滑动 长按 双击 等行为,可以是用 GestureDetector。首先创建一个 GestureDetector 对象并实现 OnGestureListener 接口。然后接管目标
View 的onTouchEvent 方法。最后就可以有选择的实现 OnGestureListener 和 OnDoubleTabListener 中的方法了。 - scrollTo/scrollBy 方法进行滑动时,其过程是瞬间完成的。此时可以使用 Scroller 滑动效果。
- View 滑动
- 三种方法:1. 通过 View 本身提供的 scrollTo/scrollBy 方法 2. 动画 3. 改变 View 的 LayoutParams。
- View 动画是对 View 的影像进行操作,并不会改变 View 的未知参数和宽高。
- 改变 LayoutParams 通过改变 View 的 marginLeft 属性。
- 比较:1. scrollTo/scrollBy 只能滑动 View 中的内容部分,而不能滑动 View 的位置。 2. 动画适用于不需要交互的 View 3. LayoutParams 适用于需要交互的 View。
- 弹性滑动
- 弹性滑动的共同思想都是将大滑动分成若干次小的滑动,并在一个时间段内完成。具体可以通过Scroller、Handler&postDelayer以及Thread&sleep等。
- 使用Scroller:原理:首先调用Scroller.startScroll()方法,然后调用invalidate()方法重绘,onDraw()方法中会调用computeScroll()方法,在该方法中获取当前的scrollX和scrollY,然后调用scrollTo()实现滑动,然后再次重绘。
- 动画:动画没什么好说的,属性动画
- Handler&postDelay:通过延时发送消息,在消息中进行View滑动,接连不断的发送消息,实现弹性滑动。
- View的事件分发机制
- 当一个MotionEvent产生以后,系统需要把这些事件传递给一个具体的View,这个传递的过程就是分发过程。
分发过程由三个方法完成:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。 - dispatchTouchEvent:用来进行事件分发,如果事件能够传递到当前View,则一定会调用到这个方法。返回值受当前View的onTouchEvent和下级View的dispatchTouchView影响,表示是否消耗这个事件。
- onInterceptTouchEvent():表示是否拦截这个事件,如果当前View拦截,那么在同一个事件序列中,此方法不会再被调动,返回结果表示是否拦截。
- onTouchEvent:用来处理单击事件,返回值表示是否消耗当前事件。
- 当一个MotionEvent产生以后,系统需要把这些事件传递给一个具体的View,这个传递的过程就是分发过程。
- View的滑动冲突
- 内外滑动方向不一致:ScrollView和ListView的冲突:左右滑时,让外部拦截点击事件,上下滑时,内部拦截,所以首先需要判断滑动的方向。。
- 内外滑动方向一致:无法判断用户想让哪一层滑动:不能通过方向判断,可以通过业务逻辑(设置状态)。
- 以上的嵌套。
《Android开发艺术探索》-第三章-View的事件体系
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- layout: postdate: 2016-01-08title: Android开发艺术探索-第三章-View...
- 注:此篇笔记只记录重难点,对于基础和详细内容请自行学习《Android开发艺术探索》 View的基础知识 什么是V...
- 3.1 View基础知识 View是Android所有控件的基类;View是一种界面层的控件的一种抽象;ViewG...