【问题标题】:Get coordinates of start and end of a view Android获取视图Android的开始和结束坐标
【发布时间】:2015-09-03 07:55:24
【问题描述】:

我试图在 Android 中获取视图的开始和结束坐标以创建动画。

我尝试了 OnTouch 事件,但我只能访问初始坐标。

我尝试使用 MotionEvent,但没有成功。

public boolean onTouch(View v, MotionEvent event)
        {
            float x = event.getX();
            float y = event.getY();
            //Log.d("S&R", "Y "+y);
            switch (event.getAction() & MotionEvent.ACTION_MASK)
            {
                case MotionEvent.ACTION_DOWN:
                    Log.d("S&R", "ACTION_DOWN");
                    break;
                case MotionEvent.ACTION_UP:
                    Log.d("S&R", "ACTION_UP");
                    break;
                case MotionEvent.ACTION_MOVE:
                    Log.d("S&R", "ACTION_MOVE");
                    break;
            }
            return false;
        }

我只想知道触摸是从上到下还是从下到上。

我该怎么做?

谢谢。

【问题讨论】:

  • on touch 给 u x & y 坐标的变化是它们的值可以很容易地解决这个问题。例如:浮动 yAxis = 0.0f; yAxis = event.getRawY()
  • 有点hacky,但你可以这样做:将第一个值保存为你触摸时,&当移动开始时与初始值比较,增加或减少将指示向上或向下
  • 感谢您的回答。问题是 ACTION_MOVE 永远不会启动,总是 ACTION_DOWN。

标签: android events view coordinates ontouch


【解决方案1】:

我明白了!

public boolean onTouch(View v, MotionEvent event) {


            boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL;
            boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN;
            boolean isMoved = event.getAction() == MotionEvent.ACTION_MOVE;


            if(isPressed){
                Log.d("S&R","isPressed");
                lastY=event.getY();
                return true;
            }

            else if(isReleased){
                Log.d("S&R","isReleased");
                lastY=event.getY();
                return true;
            }

            else if(isMoved)
            {
               //Log.d("S&R","MOVE");
               Log.d("S&R","lastY=> "+lastY+" currentY=> "+event.getY());

               if(event.getY()<lastY)
               {
                   Log.d("S&R","up");

               }
                else if(event.getY()>lastY)
               {
                   Log.d("S&R","down");

               }
                lastY=event.getY();
                return true;
            }
            return false;
        }

谢谢大家。

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 2012-07-04
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多