在我的onTouchEvent()方法中,我想执行一个继续重复的动作,直到我将手指从屏幕上抬起。这是我的代码:
public void onTouchEvent(MotionEvent event) {
synchronized (this) {
Matrix matrix = new Matrix();
float x = event.getX();
if (x >= screenWidth / 2) {
rotate += 10;
} else {
rotate -= 10;
}
matrix.postRotate(rotate, square.getWidth() / 2, square.getHeight() / 2);
position.set(matrix);
position.postTranslate(xPos, yPos);
}
return true;
}
但问题是,如果我按住我的手指而不动它,动作只会执行一次。我尝试了各种解决方案,包括
boolean actionUpFlag = false;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
actionUpFlag = true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
actionUpFlag = false;
}
while (actionUpFlag) {
//the block of code above
}
并且仅在事件为MotionEvent.ACTION_MOVE时执行操作,并在onTouchEvent()结尾处返回false,所有这些都不成功。谁能告诉我错误是什么?
MotionEvent.ACTION_MOVE尝试的代码块:
if (event.getAction() == MotionEvent.ACTION_MOVE) {
//block of code above
}
答案 0 :(得分:1)
您是否考虑使用Thread
来完成此操作?
现在已经很晚了(我已经工作了13个小时),但这应该给你一个要点:
WorkerThread workerThread;
public void onTouchEvent(MotionEvent event){
int action = event.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:
if (workerThread == null){
workerThread = new WorkerThread();
workerThread.start();
}
break;
case MotionEvent.ACTION_UP:
if (workerThread != null){
workerThread.stop();
workerThread = null;
}
break;
}
return false;
}
您的Thread
实施可能是一个内部类,如:
class WorkerThread extends Thread{
private volatile boolean stopped = false;
@Override
public void run(){
super.run();
while(!stopped){
//do your work here
}
}
public void stop(){
stopped = true;
}
}
除非您想执行其他操作,否则您可能只想忽略MotionEvent.ACTION_MOVE
。
如果要使用WorkerThread
更新UI,请确保以线程安全的方式执行此操作。
Here is a link to the Android API Guide on Processes and Threads