触摸监听器和长按监听器

3

我写了一段代码,在SurfaceView上使用触摸监听器移动物体,效果很好。但是,当我插入长按监听器时,触摸监听器停止正常工作,即使我没有触摸物体,它也会移动。长按需要打开对话框。

在onCreate方法中:

sf = new SurfaceView(this);
sf.setOnTouchListener(this);
sf.setOnLongClickListener(this);

长按事件:

public boolean onLongClick(View v) {
    if (!changePositionMode){
        final Dialog dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.text_manager);
        dialog.setTitle("Browser");
        dialog.setCancelable(true);
        dialog.show();
    }
    return false;
}

触摸监听器
public boolean onTouch(View v, MotionEvent event) {
    Point p=new Point((int)event.getX(),(int)event.getY());
    if (event.getAction()==MotionEvent.ACTION_DOWN){
        }else if (object.isTouch(p)){
            changePositionMode=true;
            x=event.getX();
            y=event.getY();
            draw();
            return true;
        }   
    }
    else if (event.getAction()==MotionEvent.ACTION_MOVE){
        t.changeTamplatePosition(event.getX()-x,event.getY()-y);
        x=event.getX();
        y=event.getY();
        draw();
        return true;
    }
    else if (event.getAction()==MotionEvent.ACTION_UP){
        changePositionMode=false;
    }

    return false;
}

请参考此答案,了解如何将触摸事件传递给长按监听器:https://dev59.com/CFvUa4cB1Zd3GeqPqy_2 - Sanders
长按功能正常吗?问题出在触摸事件上吗? - CompEng
问题出在触摸事件上。 - tzahibs
1个回答

5

OnTouch(View v, MotionEvent event)函数中,你需要返回false而不是true,这样其他监听器(如OnLongClickListener)才能保持活动状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接