Android 0nTouch事件问题[向下和向上滑动]

问题描述

| 我有一个需要像iPhone一样的onTouch滑动事件的应用程序。他们是 向上滑动。 刷下。 向左滑动。 向右滑动。 我实现了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;
    }
谢谢。     

解决方法

关于什么...
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
}
    ,这是我一段时间前写的一个侦听器,可以同时处理掉向下的swypes。我曾使用一个“ 3”变量来跟踪触摸位置。那里有一些不需要的代码,但是您会明白的:
    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,tableIndexM);
                }
                oldPosition = event.getY();
                return true;
            }
            return false;
        }
    });