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

来源:互联网 发布:java批量发送邮件 编辑:程序博客网 时间:2024/05/09 16:20
MotionEventgetRawX、 getRawYgetX、 getY以及View中的getScrollX
getScrollY; 以及View.getX、 View.getYView.getTranslationX
View.getTranslationY的区别
1.getRawX、 getRawYgetX、 getY的区别
在编写android的自定义控件, 或者判断用户手势操作时, 往往需要使用MotionEvent中的getRawX()、 getRawY()
getX()、 getY()取得触摸点在X轴与Y轴上的距离, 这四个方法都返回一个float类型的参数, 单位为像素( Pixel) 。
getRawX()、 getRawY()返回的是触摸点相对于屏幕的位置, 而getX()、 getY()返回的则是触摸点相对于View的位置。
以下两张图直观的表现了这几个方法的区别, 在屏幕中央放置了一个Button, 并为它注册了OnTouchListener, 图中绿圆点
为触摸点位置。

2.View中的getScrollX、 getScrollY
getScrollX()getScrollY()的值由调用ViewscrollTo(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.1中, 屏幕中心放置了一个button, 而button的内容被放置在了它的左上角。
2.调用buttonscrollTo(-100, -100)方法, 结果如图2所示, button内的内容被移至相对button左上角(-100, -100)的位置
3.对图2button调用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()的值为负数, 同理, 向scrollToscrollByx中传入负数, view
的内容向右移动, 反之向左。
View中的内容向下移动时, getScrollY()的值为负数, 同理, 向scrollToscrollByy中传入负数, view中的内容向下移
动, 反之向上。

3.View中的getX、 getTranslationX的区别
view.getTranslationX计算的是该view的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。
view.getX相当于该view距离父容器左边缘的距离,等于getLeft+getTranslationX。
示意图:

3.获取View在窗口中的位置
int[] position = newint[2];
view.getLocationInWindow(position);
y=position[1]
数组的两个值分别为ViewX,Y坐标;


0 0
原创粉丝点击