高级UI<第四十三篇>:Android直角坐标系

在自定义view时,我们必须了解几个常用的直角坐标系:屏幕直角坐标系view直角坐标系滚动直角坐标系速度直角坐标系

【一】 屏幕直角坐标系

先来看一下代码:

@Override
public boolean onTouchEvent(MotionEvent event) {

    float xx = event.getRawX();
    float yy = event.getRawY();

    //...
}

当处理触摸事件时,往往需要获取当前触摸的坐标,getRawXgetRawY是以屏幕左上角(非view左上角)作为原点(0,0),其直角坐标系如下图:

图片.png

如图所示,正方向是右侧和下侧,当触摸view时,使用getRawXgetRawY获取坐标点和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实现滚动,还可以使用getScrollXgetScrollY获取view在滚动直角坐标系上的坐标。

Scroller和OverScroller这两大滚动辅助工具类的getCurrXgetStartXgetFinalX也可以获取滚动直角坐标系上的坐标。

它的直角坐标系如图:

图片.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),手指快速向上或左滑动为负方向,反之为正方向。

[本章完...]

你可能感兴趣的:(高级UI<第四十三篇>:Android直角坐标系)