【问题标题】:Android 0nTouch event problem [Swipe DOWN and UP]Android 0nTouch 事件问题 [Swipe DOWN and UP]
【发布时间】:2011-04-18 13:42:20
【问题描述】:

我有一个需要 onTouch 滑动事件的应用程序,例如 Iphone。他们是

  1. 向上滑动。
  2. 向下滑动。
  3. 向左滑动。
  4. 向右滑动。

我实现了 onTouch 事件如下。我得到了正确的向左和向右滑动动作。但这是实现向下和向上滑动动作的正确方法。

我的密码:

    float downXValue,downYValue;

    @Override
    public boolean onTouchEvent(MotionEvent arg1) {

         // Get the action that was done on this touch event
        switch (arg1.getAction())
        {
            case MotionEvent.ACTION_DOWN:
            {
                // store the X value when the user's finger was pressed down
                downXValue = arg1.getX();
                downYValue = arg1.getY();
                break;
            }

            case MotionEvent.ACTION_UP:
            {
                // Get the X value when the user released his/her finger
                float currentX = arg1.getX();   
                float currentY=arg1.getY();

                // going backwards: pushing stuff to the right
                if (downXValue < currentX)
                {
                    Log.d(DEBUG_TAG, "Right");
                }

                // going forwards: pushing stuff to the left
                if (downXValue > currentX)
                {

                    Log.d(DEBUG_TAG, "Left");
                }
                break;
            }
        }

         //GestureListener is called here... 

        //return gestures.onTouchEvent(event);


        return true;
    }

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    怎么样……

    if (downYValue < currentY)
    {
        Log.d(DEBUG_TAG, "Down");
    }
    

    你确定上面的代码是你写的吗?

    编辑

    好的,我相信你。你要做的基本上是:

    double sizeInX = Math.abs(downXValue - currentX);
    double sizeInY = Math.abs(downYValue - currentY);
    if( sizeInX > sizeInY ){
       // you better swipe horizontally
    } else {
       // you better swipe vertically
    }
    

    【讨论】:

    • 嗨 crisitain 感谢您的回复,我已经添加了这一点,但它会导致向下滑动并向右或向左滑动操作。它将导致 2 个操作。
    • 嗨 cristain 我会试试这个..谢谢
    【解决方案2】:

    这是我前段时间写的一个监听器,它可以处理上下滑动。我用来跟踪触摸位置的 float oldPosition 变量。里面有一些不需要的代码,但你会明白的:

        LinearLayout tableM = (LinearLayout) findViewById (R.id.tableM);
        tableM.setOnTouchListener(new OnTouchListener () {
            public boolean onTouch(View view, MotionEvent event) {
                if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                    oldPosition = event.getY();
                    return true;
                } else
                if (event.getAction() == android.view.MotionEvent.ACTION_MOVE) {
                    if (event.getY() < oldPosition) {
                        tableIndexM++;
                        if (tableIndexM > (minsecs.length - 3)) {
                            tableIndexM = 0;
                        }
                        fillTable (rowM0, rowM1, rowM2, minsecs, tableIndexM);
                    }
                    else if (event.getY() > oldPosition) {
                        tableIndexM--;
                        if (tableIndexM < 0) {
                            tableIndexM = minsecs.length - 3;
                        }
                        fillTable (rowM0, rowM1, rowM2, minsecs, tableIndexM);
                    }
                    oldPosition = event.getY();
                    return true;
                }
                return false;
            }
        });        
    

    【讨论】:

    • 嗨 Aleadam 感谢您的回答.. 我的问题是我想要所有 4 个事件向上、向下、向左滑动。如果我使用你的答案,它将导致 2 个动作。即上/下和左/右。
    • 我明白这一点,但您仍然可以评估每个ACTION_MOVE 事件中任何方向的最小行进位置/时间并采取相应措施,即一堆if (event.getX &gt; oldXPos) ... if (event.getY() &gt; oldYPos)等,第一个达到阈值的会触发操作并重置所有标记。
    • @user 我没有收到您对 Cristian 的评论:“这将导致 2 个操作”。您是否在Log.d(DEBUG_TAG, "Down"); 之后添加了return true; 语句?以及如何设置阈值?不是每一个微小的举动都应该是一个轻击。我至少会做类似if (downYValue &lt; (currentY+50))
    • No Aleadam 问题是我没有给出任何时间限制。这就是问题所在。现在我得到了解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 2016-02-04
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多