图解MotionEvent中getRawX、getRawY与getX、getY以及View中的getScrollX、getScrollY

1.getRawX、getRawY与getX、getY的区别

在编写android的自定义控件,或者判断用户手势操作时,往往需要使用MotionEvent中的getRawX()、getRawY()与getX()、getY()取得触摸点在X轴与Y轴上的距离,这四个方法都返回一个float类型的参数,单位为像素(Pixel)。getRawX()、getRawY()返回的是触摸点相对于屏幕的位置,而getX()、getY()返回的则是触摸点相对于View的位置。

以下两张图直观的表现了这几个方法的区别,在屏幕中央放置了一个Button,并为它注册了OnTouchListener,图中绿圆点为触摸点位置。

    

2.View中的getScrollX、getScrollY

getScrollX()与getScrollY()的值由调用View的scrollTo(int x, int y)或者scrollBy(int x, int y)产生,其中scrollTo是将View中的内容移动到指定的坐标x、y处,此x、y是相对于

View的左上角,而不是屏幕的左上角。scrollBy(int x, int y)则是改变View中的相对位置,参数x、y为距离上一次的相对位置。

文字解释总是不好理解的,那么我们就直接上图吧,直观一些。

(图1)                                                         (图2)                                                                (图3)

1.图1中,屏幕中心放置了一个button,而button的内容被放置在了它的左上角。

2.调用button的scrollTo(-100, -100)方法,结果如图2所示,button内的内容被移至相对button左上角(-100,-100)的位置

3.对图2的button调用scrollBy(-100,-100)方法,结果如图3所示,button内的内容被移至相对于图2的(-100,-100)位置

这时的getScrollX()与getScrollY()的值为:

06-15 15:44:56.072  20471-20471/com.test.yangy.studiotest V/ScrollActivity﹕ btn scroll X=-200
06-15 15:44:56.072  20471-20471/com.test.yangy.studiotest V/ScrollActivity﹕ btn scroll Y=-200

值得注意的是,当View中的内容向右移动时,getScrollX()的值为负数,同理,向scrollTo与scrollBy的x中传入负数,view中的内容向右移动,反之向左。

当View中的内容向下移动时,getScrollY()的值为负数,同理,向scrollTo与scrollBy的y中传入负数,view中的内容向下移动,反之向上。

时间: 2024-10-05 09:38:01

图解MotionEvent中getRawX、getRawY与getX、getY以及View中的getScrollX、getScrollY的相关文章

MVC View中获取action、controller、area名称

获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.RouteData.Values["action"].ToString(); 获取路由参数值: ViewContext.RouteData.Values[名称].ToString(); 如:ViewContext.RouteData.Values["ID"].ToStrin

Android MotionEvent getX() getY() getRawX() getRawY() and View getTop() getLeft()

getRowX:触摸点相对于屏幕的坐标getX: 触摸点相对于按钮的坐标getTop: 按钮左上角相对于父view(LinerLayout)的y坐标getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标getRight():等同于下面的计算:getLeft()+getWidth(). 当你触到按钮时,x,y是相对于该按钮左上点的相对位置.而rawx,rawy始终是相对于屏幕的位置getX()和getY()获得的永远是view的触摸位置坐标(这两个值不会超过view的长度和

android view之getLeft(),getRight(),getTop(),getBottom(),getX(),getY(),getRawX(),getRawY(),getTranslationX(),getTranslationY()记录

自定义view时使经常使用到的view距离及坐标记录 如下 第一:view中一般用于获取view宽高 getLeft()        view本身左侧   距离父布局左侧   的距离 getRight()      view本身右侧   距离父布局左边侧  的距离 getTop()         view本身顶部   距离父布局顶部    的距离 getBottom()    view本身底部   距离父布局顶部   的距离 View的  Height = view.getBottom()

Android中View的getX,getY...

Android坐标系的理解直接关系到后面你Android进阶部分的学习,如果没有夯实的基础,你自定义View时就会有种欲求不满,欲罢不能——想搞懂却又觉得难,想放弃又觉得舍不得. Android中的坐标系以及获取坐标的方法 Android中有两种坐标系,分别称之为Android坐标系和视图坐标系.而对应的也有一些相关的方法可以获取坐标系中的坐标值.只有搞清楚这些区别,才能在实现的时候不至于出错或者得不到你想要的效果. 一.Android坐标系和视图坐标系 (1)Android坐标系 先来看一看A

关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听

今天做一个自定义ViewGroup,通过addView动态添加子控件,为了省事,直接在父控件里重写public boolean onTouchEvent(MotionEvent event){}方法来监听当前触碰是哪个按钮,遇到点问题,所以写下来. 首先是点击效果只有 MotionEvent.ACTION_DOWN,这个把返回改为return true;就行了 然后是 getX()和getRawX()的区别,这个这篇博文有写到 http://www.cnblogs.com/foura/artic

onInterceptTouchEvent 与 onTouchEvent 分析与MotionEvent在ViewGroup与View中的分发

onInterceptTouchEvent 与 onTouchEvent 分析与MotionEvent在ViewGroup与View中的分发 Notice:本文将紧接着 Android 触屏事件 OnTouch onClick onTouchEvent对于触屏事件的处理和分发 这一片博文来分析,假设您还没有读过这一片博文,强烈建议你先读一次上述博文 OK,言归正传,我们開始吧 近期,一直听到有人在争论关于dispatchTouchEvent这个函数 和 onInterceptTouchEvent

getX,getY,getScrollX,getScrollY,ScrollTo(),ScrollBy()辨析

前言:前两天看了自定义控件,其中有一些东西我觉得有必要深入理解一下 以下图为例: getX(),getY()返回的是触摸点A相对于view的位置 getRaw(),getRawY()返回的是触摸点B相对于phone(屏幕)的位置. scrollTo是将View中的内容移动到指定的坐标x,y处,此x,y是相对于View的左上角来说,而不上屏幕的左上角. 当ScrollTo(-30,50)时,它从正中心移动到了右上方 可能有些人对此有疑问,按照惯性思维,view中的内容应该是移动到左上方的,我们点进

Android中实现Bitmap在自定义View中的放大与拖动

一:基本实现思路 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对自定义View的触摸事件监听 放大与拖动 基于单点触控实现Bitmap对象在View上的拖动.并且检测View的边缘,防止拖动过界.基于两个点触控实现Bitmap对象在View上的放大.并且检测放大倍数.基于Matrix对象实现对Bitmap在View上放大与平移变换 Bitmap对象在View中的更新与显示 通过重载onDraw方法,

事件分发系列—View中的dispatchTouchEvent和onTouchEvent分析

dispatchTouchEvent 话不多说直接上源码 /** * Pass the touch screen motion event down to the target view, or this * view if it is the target. * 将屏幕的按压事件传递给目标view,或者当前view即目标view * * @param event The motion event to be dispatched. * 需要分发的事件 * * @return True if t