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;
}
}`