我已经像这样设置了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;
}
}
}
);
问题是,当我点击并按住它时,“动作向下”和“动作向上”都被打印出来了吗?是什么导致了这种行为?
答案 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,这可以帮助你从单点触摸事件中获得更多帮助。