Android Scroll分析(一)
来源:互联网 发布:广西广电网络收费套餐 编辑:程序博客网 时间:2024/06/09 17:11
1.滑动一个view,实质上就是移动一个view,改变其所处的位置,原理与动画效果的实现非常相似,都是通过不断的改变view的坐标来实现这一效果。所以要实现view的滑动,就必须监听用户的触摸事件,并且根据事件传入的坐标,动态且不断的改变view的坐标,从而实现view随用户的滑动而滑动。
2.Android坐标系
在Android中,将屏幕的最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴的正方向,从这个点向下是Y轴的正方向。如图所示:
系统提供了 getLocationOnScreen(int location[])这样的方法来获取android坐标系中点的的位置,即该视图左上角在android坐标系中的坐标。另外在触摸事件中使用getRawX(),getRawY()方法获取android坐标系中的坐标。
3.视图坐标系
除了上述所说的坐标系之外,还有一种视图坐标系,它描述了子视图在父视图中的位置关系,这两种坐标系不矛盾也不复杂,他们的作用是相辅相成的。与android坐标系类似,视图坐标系同样是一原点向右是X轴正方向,以原点向下为Y轴正方向,只不过在视图坐标系中,原地单不再是android坐标系中的屏幕最左上角,而是以父视图左上角为坐标原点,如图所示:
在触摸事件中,通过getY(),getX()所获得的坐标就是视图坐标系中的坐标。
3.触摸事件
触摸事件MotionEvent中封装了一些常用的事件常量,它定义了不同的触摸事件的不同类型。
public static final int ACTION_DOWN = 0; // 按下public static final int ACTION_UP = 1; // 抬起public static final int ACTION_MOVE = 2; // 移动public static final int ACTION_CANCEL = 3; // 取消触摸动作public static final int ACTION_OUTSIDE = 4; //动作超出边界public static final int ACTION_POINTER_DOWN = 5; // 多点按下public static final int ACTION_POINTER_UP = 6; // 多点抬起public static final int ACTION_HOVER_MOVE = 7; // 鼠标在view上移动public static final int ACTION_SCROLL = 8; //非触摸滚动,主要是由鼠标、滚轮、轨迹球触发.........(不一一列举)
通常情况下我们会在
@Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
中通过event.getAction()方法来获取到触摸事件的类型,并且用switch-case方法来进行筛选。
以下是单点触摸事件的模板:
@Override public boolean onTouchEvent(MotionEvent event) { // 获取当前输入点的X,Y坐标(视图坐标) int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_UP: // 按下 break; case MotionEvent.ACTION_MOVE: // 移动 break; case MotionEvent.ACTION_DOWN: // 抬起 break; } return true; }
在Android中,系统提供了很多的方法来获取坐标值,相对距离等。下图表示了获取坐标值的各种方法:
view提供的获取坐标的方法:
getTop(): 获取到的是view自身的顶边到其父布局顶边的距离;getLeft(): 获取到的是view自身的左边到其父布局左边的距离;getRight():获取到的是view自身的右边到其父布局左边的距离;getBotton():获取到的是view自身的底边到其父布局顶边的距离;
MotionEvent提供的方法:
getX():点击的点距离控件左边的距离,即视图坐标getY():点击的点距离控件顶边的距离,即视图坐标getRawX():点击的点距离整个屏幕左边的距离,即绝对坐标getRawY():点击的点距离整个屏幕顶边的距离,即绝对坐标
0 0
- Android Scroll分析(一)
- Android Scroll分析(一)
- Android Scroll分析(一)滑动效果产生分析
- Android Scroll分析(三)----Scroller
- Android Scroll原理分析
- Android scroll 分析
- Android Scroll分析
- Android Scroll分析
- Android Scroll分析
- Android Scroll分析
- Android Scroll 分析
- Android Scroll分析
- Chapter5-Android Scroll 分析
- android scroll分析
- Android Scroll 分析
- Android Scroll分析
- Android Scroll分析
- Android Scroll 滑动分析
- Android静默安装
- java操作hdfs实例,自己封装好的
- iOS开发核心语言Objective C语言 —— 特有语法及设计模式
- CodeIgniter学习笔记 Item8--CI辅助函数
- maven项目下使用webservice spring mvc + cxf
- Android Scroll分析(一)
- 136. Single Number
- iOS开发应用上架必读最新苹果审核规则(史上最全版)
- CodeIgniter学习笔记 Item9--CI中的类库
- 走完学习的全程
- 输入控制——Buttons——翻译自developer.android.com
- Python类成员方法与静态方法
- python函数学习笔记
- 如何获取iOS App素材