单击+移动对象

时间:2013-04-09 15:02:56

标签: android click touch move motionevent

我目前正在使用MotionEvent.ACTION_MOVE函数来检测用户是否移动了一个对象(在本例中是一个ImageView)。

问题在于,现在我的算法变得更加复杂,我需要区分用户是否点击此对象或移动它。

我尝试使用MotionEvent.ACTION_DOWN函数但问题是,每次单击该对象时,也会触发MotionEvent.ACTION_MOVE。

怎么能实现这个目标? (非常欢迎代码)

提前致谢。

==编辑==

这是我的代码:

img_view.setOnTouchListener(new View.OnTouchListener()
{   
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        switch(event.getAction())
        {
                case MotionEvent.ACTION_DOWN :
            {
            }                   
            break;

            case MotionEvent.ACTION_MOVE :
            {
            }
                    break;  

            case MotionEvent.ACTION_UP :
            {
            }
            break;
            }

        return true;
    }
});

2 个答案:

答案 0 :(得分:1)

为了检测四处移动,你想检查一个人的手指......是否在移动:)

在ACTION_DOWN中检查位置是否在变化。如果是,在某种程度上,您知道用户正在将手指拖过屏幕。

您可能需要查看this tutorial project,这是一个简单的ImageView示例,其中包含拖动,点击和捏合等多项操作。

答案 1 :(得分:0)

答案:

        final GestureDetector gesture_getector = new GestureDetector(HomeActivity.this, new GestureListener());
    view_img.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(final View view, final MotionEvent event)
        {
            if (gesture_getector.onTouchEvent(event))
            {
                return true;
            }

                // End of move object detection
            if (event.getAction() == MotionEvent.ACTION_UP)
            {
                if (cursor_is_scrolling)
                {
                    cursor_is_scrolling  = false;                       
                };
            }

            return false;
        }
    });


private class GestureListener extends SimpleOnGestureListener
{
    @Override
    public boolean onDown(MotionEvent e) { return true; }

    // Single click detection
    @Override
    public boolean onSingleTapUp(MotionEvent e)
    {
        return true;
    }

    // Move object detection
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
    {
        cursor_is_scrolling  = true;

        return true;
    }
}