在自定义view时,我们必须了解几个常用的直角坐标系:
屏幕直角坐标系
、view直角坐标系
、滚动直角坐标系
、速度直角坐标系
。
【一】
屏幕直角坐标系
先来看一下代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
float xx = event.getRawX();
float yy = event.getRawY();
//...
}
当处理触摸事件时,往往需要获取当前触摸的坐标,getRawX
和getRawY
是以屏幕左上角(非view左上角)作为原点(0,0)
,其直角坐标系如下图:
如图所示,正方向是右侧和下侧,当触摸view时,使用getRawX
和getRawY
获取坐标点和view本身无关,只和屏幕有关。
【二】
view直角坐标系
先来看一下代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
//...
}
当处理触摸事件时,往往需要获取当前触摸的坐标,getX和getY是以view左上角(非屏幕左上角)作为原点(0,0),其直角坐标系如下图:
图片.png如图所示,正方向是右侧和下侧,当触摸view时,使用getX和getY获取的坐标点是view本身的坐标。
【三】
滚动直角坐标系
view本身可以使用scrollTo、
scrollBy实现滚动,还可以使用getScrollX
、getScrollY
获取view在滚动直角坐标系
上的坐标。
Scroller和OverScroller这两大滚动辅助工具类的getCurrX
、getStartX
、getFinalX
也可以获取滚动直角坐标系
上的坐标。
它的直角坐标系如图:
图片.png如图所示,正方向是左和上侧。在Android中,这种坐标系最为特殊(当然,这种坐标系是我自己命名的)
。
【四】
速度直角坐标系
这里的速度
是指手指滑动速度
。
在物理学上,速度这个词汇大家都不会陌生;
在数学上,这里的速度可以理解为向量
,向量是有方向的,所以有正有负;
在Android上,手指滑动速度可以理解为:物理学的速度+方向
或者向量
,它的代码获取如下:
-
获取最小速度
int mMinimumFlingVelocity= ViewConfiguration.get(getContext()).getScaledMinimumFlingVelocity();
-
获取最大速度
int mMaximumFlingVelocity= ViewConfiguration.get(getContext()).getScaledMaximumFlingVelocity();
-
获取实际速度
MotionEvent.ACTION_DOWN事件中的代码:
//创建惯性滑动速度追踪类对象
velocityTracker = VelocityTracker.obtain();
MotionEvent.ACTION_MOVE事件中的代码:
//将事件加入到VelocityTracker类实例中
velocityTracker.addMovement(event);
//计算1秒内滑动的像素个数
velocityTracker.computeCurrentVelocity(1000);
//X轴方向的速度
xVelocity = (int) velocityTracker.getXVelocity();
//Y轴方向的速度
yVelocity = (int) velocityTracker.getYVelocity();
它的直角坐标系如下:
图片.png
如图所示,正方向是右侧和下侧,当触摸view时,立即确定当前触摸点为原点(0,0)
,手指快速向上或左滑动为负方向,反之为正方向。
[本章完...]
网友评论