关于view

1 什么是 View

View 是Android中所有控件的基类,例如Button和TextView、ViewGroup 等常见控件他们的基类都是View,View是一种界面层的控件的一种抽象,代表了一个控件。View 本身可以是单个控件也可以是由多个控件组成的一组控件,通过这种关系就形成了View 树的结构,与Web前端中的DOM树概念相似。

1.1 View的位置参数

View 的位置主要有四个顶点决定的, top(左上角纵坐标)、left(左上角横坐标)、right(右下角横坐标)、bottom(右下角纵坐标),这些顶点的坐标是相对于 View 的父容器来说,是一种相对坐标。

view 源码中他们对应于mLeft、mRight、mTop、mBottom这四个成员变量,获取方式如下:

Left=getLeft() 、Right=getRight() 、Top=getTop() 、Bottom=getBottom()

2 MotionEvent 和 TouchSlop

1. MotionEvent 是指用户手指触摸屏幕产生的一系列事件 分为 ACTION_DOWN(手指刚接触屏幕), ACTION_MOVE(手指在屏幕上滑动), ACTION_UP(手指从屏幕上松开瞬间)。

2. 点击屏幕后松开,事件序列 DOWN->UP点击屏幕滑动一会再松开,事件序列为 DOWN->MOVE->…->MOVE->UP。

3. getX/getY获取相对当前View左上角的x和y坐标;getRawX/getRawY获取相对手机屏幕左上角的x和y坐标。

4. TouchSlop 是系统能识别滑动的最小距离,是系统常量,与设备有关,不同设备,值可能不同,当手指在屏幕上滑动,小于这个距离,系统不认为你在进行滑动操作;可通过ViewConfiguration.get(getContext()).getScaledTouchSlop()方法来获取;可以利用此参数进行一些滑动过滤,当未达到此值的时候可以认为未达到滑距离的临界值。

3 GestureDetector 和Scroller

GestureDetector

用于辅助检测用户的单击、滑动、长按、双击等行为;

OnGestureListener 接口的方法

onDown : 手指轻轻触摸屏幕的瞬间,由一个 ACTION_DOWN 触发;

onShowPress : 手指轻触屏幕,尚未松开或者拖动, 由一个 ACTION_DOWN 触发;

onSingTapUp : 手指松开,由 ACTION_DOWN 触发, 这是单击行为;

onScroll: 手指按下屏幕并拖动,由一个 ACTION_DOWN , 多个 ACTION_MOVE 触发, 这是拖动行为;

onLongPress: 用户长久地按着屏幕不放,即长按;

onFling: 用户按下触摸屏,快速移动后松开,由一个 ACTION_DWON、多个 ACTION_MOVE 和一个 ACTION_UP 触发,快速滑动行为;

OnDoubleTapListener 接口中的方法

onDoubleTap: 双击,由两次连续的单击组成,不能和 onSingleTapConfirmed 共存;

onSingleTapConfirmed: 单击行为;

onDoubleEvent: 表示双击行为,在双击的期间, ACTION_DOWN、ACTION_MOVE、ACTION_UP 都不会触发此回调。

在实际开发中可以不使用 GestureDetector ,完全可以在View的 onTouchEvent 方法中根据MotionEvent类型以及滑动速度等条件实现所需的监听,作者建议:如果只是监听滑动相关的推荐在onTouchEvent中实现,如果需要监听双击,使用GeststureDetector。

2.Scroller

用来实现View的弹性滑动,View的scrollTo/scrollBy是瞬间完成的,Scroller本身并不能实现view的滑动,使用Scroller配合View的computeScroll方法配合使用达到弹性滑动的效果,它不断地让view重绘,而每一次重绘距滑动起始时间会有一个时间间隔,通过这个时间间隔Scroller就可以得出view的当前的滑动位置,知道了滑动位置就可以通过scrollTo方法来完成view的滑动。就这样,view的每一次重绘都会导致view进行小幅度的滑动,而多次的小幅度滑动就组成了弹性滑动,这就是Scroller的工作原理

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值