onTouch方法if和else部分同时运行

时间:2014-01-12 11:19:40

标签: android

我已经像这样设置了onTouchListener ......

myView.setOnTouchListener
(
    new OnTouchListener()  
    {
        @Override
        public boolean onTouch(View view, MotionEvent event) 
        {
            if (event.getAction() == MotionEvent.ACTION_DOWN)  
            {
                DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);  
                view.startDrag(null, shadowBuilder, view, 0);=System.out.println("ACTION DOWN");
                return true;
            }
            else 
            {
                System.out.println("ACTION UP");
                return true;
            }
        }
    }
);

问题是,当我点击并按住它时,“动作向下”和“动作向上”都被打印出来了吗?是什么导致了这种行为?

2 个答案:

答案 0 :(得分:1)

请注意,每次触摸,移动或离开屏幕时都会调用onTouch()方法。因此,当ACTION_DOWN不仅仅是ACTION_UP时,会调用else结构中的语句。

这可能是你想要的

    if (event.getAction() == MotionEvent.ACTION_DOWN)  
    {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);  
        view.startDrag(null, shadowBuilder, view, 0);=System.out.println("ACTION DOWN");
        return true;
    }
    else if(event.getAction() == MotionEvent.ACTION_UP) 
    {
        System.out.println("ACTION UP");
        return true;
    }

答案 1 :(得分:0)

当屏幕上的新触摸开始时,MotionEvent.ACTION_DOWN会做出反应,这是您的if部分。

如果任何类型的MotionEvent像ACTION_MOVE和ACTION_UP那样执行,那么你的其他部分将会执行。因此,如果您使用ACTION_DOWN执行某些操作,屏幕触摸必须至少执行ACTION_MOVE或ACTION_UP

因此,当您触摸屏幕时,它会执行您的两个事件。

我认为你必须在多点触控中工作,这样你就可以同时使用MotionEvent.ACTION_POINTER_DOWN和MotionEvent.ACTION_POINTER_UP,这可以帮助你从单点触摸事件中获得更多帮助。