美文网首页
高级UI<第四十三篇>:Android直角坐标系

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

作者: NoBugException | 来源:发表于2020-02-15 04:40 被阅读0次

    在自定义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直角坐标系

          本文链接:https://www.haomeiwen.com/subject/llasfhtx.html