Android 手指触摸屏幕时SurfaceView执行方法

Android 手指触摸屏幕时SurfaceView执行方法,android,surfaceview,touch-event,Android,Surfaceview,Touch Event,这很可能是一件小事,但我找不到解决办法。 事情很简单,用户按下屏幕,当他握住屏幕上的手指时,我想要执行一段代码 下面是一个代码示例: @Override public boolean onTouchEvent(MotionEvent event) { synchronized (getHolder()) { if (event.getAction() == MotionEvent.ACTION_DOWN) {

这很可能是一件小事,但我找不到解决办法。 事情很简单,用户按下屏幕,当他握住屏幕上的手指时,我想要执行一段代码

下面是一个代码示例:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        synchronized (getHolder()) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        myobject.setX(myobject.getX() - 10);
            } else if (event.getAction() == MotionEvent.ACTION_MOVE) {

            } else if (event.getAction() == MotionEvent.ACTION_UP) {
            }
            return true;
        }
    }

这段代码的效果是myobject.setX()只发生一次,我希望它在用户将手指保持在屏幕上的同时不断重复,因此如果它保持3秒钟,myobject.setX()将减少-10几次。

公共布尔onTouchEvent(MotionEvent)中提供的将仅与初次触摸时的动作事件匹配。您需要在else if语句中继续更新:
(event.getAction()==MotionEvent.ACTION\u MOVE)

您可以执行以下操作(示例):

然后在您的触摸事件中:

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (getHolder()) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            t.start();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            t.stop();
        }

        return true;
    }
}

它会每秒向左移动10次。你需要做一些事情,比如决定它到达边缘的时间,并设置
howLongUntilEdge
var以反映正确的值你可以使用一个布尔变量(在ACTION\u DOWN时指定为true)来指示你仍然按下屏幕,当你抬起手指(ACTION\u UP)时,将其设置为false,因此,在此期间,您可以启动一个线程,以便在您想要的时间内执行代码,如下所示:


通过在最后返回true,您可能会禁用事件的进一步传播,将return语句更改为false……我最喜欢这种方法。谢谢你的回答,不客气。需要注意的一件事是,在一些罕见的情况下,可能不会运行带有ACTION_UP的onTouchEvent,例如,如果您在按下手机时接到电话。您可能还希望在片段/活动暂停时停止计时器
@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (getHolder()) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            t.start();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            t.stop();
        }

        return true;
    }
}
private boolean mIsStillPressing;

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (getHolder()) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            mIsStillPressing = true;
            new Thread() {
                @Override
                public void run() {
                    // Still moving object until an ACTION_UP is done.
                    while (mIsStillPressing) {
                        myobject.setX(myobject.getX() - 10);

                        // Some sleep time
                        try {
                            Thread.sleep(100L);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            mIsStillPressing = false;
        }
        return true;
    }
}`