Android 发生操作时停止线程
我在使用线程时遇到了真正的问题。简单地说,我想要一个红方块在被触摸时出现在屏幕上,而在没有任何东西触摸屏幕时消失。我设法使它起作用 现在我正在尝试实现它,这样当触摸屏幕时,就会出现红色方块,但随后开始向手指移动。我想我应该在触摸屏幕时运行一个线程来更新正方形的X&Y坐标。我会尝试这一点,一旦我得到了线程开始和停止的行动_下来和行动了 我已经尝试实现了一个线程,它只打印到系统输出,当触摸屏幕时调用它,但当我移开手指时它不会停止。我只尝试在布尔值为true时运行线程。(这是在动作发生时设置的。然后我将动作设置为false 我在某个地方读到它不工作,因为线程必须在停止之前完成,但我不理解这一点 如果有人能告诉我哪里出了问题,并向我解释,我将不胜感激Android 发生操作时停止线程,android,multithreading,action,Android,Multithreading,Action,我在使用线程时遇到了真正的问题。简单地说,我想要一个红方块在被触摸时出现在屏幕上,而在没有任何东西触摸屏幕时消失。我设法使它起作用 现在我正在尝试实现它,这样当触摸屏幕时,就会出现红色方块,但随后开始向手指移动。我想我应该在触摸屏幕时运行一个线程来更新正方形的X&Y坐标。我会尝试这一点,一旦我得到了线程开始和停止的行动_下来和行动了 我已经尝试实现了一个线程,它只打印到系统输出,当触摸屏幕时调用它,但当我移开手指时它不会停止。我只尝试在布尔值为true时运行线程。(这是在动作发生时设置的。然后我
package com.mr.mwood.thumbinput;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity {
boolean screenIsBeingTouched = false;
Thread th=new Thread(){
@Override
public void run(){
while (screenIsBeingTouched == true) {
try {
Thread.sleep(2000);
System.out.println("Thread is running ");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
class SampleView extends SurfaceView {
int timer =0;
private final SurfaceHolder surfaceHolder;
private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// CONSTRUCTOR
public SampleView(Context context) {
super(context);
surfaceHolder = getHolder();
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:{
screenIsBeingTouched = true;
System.out.println("screenIsBeingTouched = true");
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);
canvas.drawRect(30, 30, 80, 80, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
th.start();
break;
}
case MotionEvent.ACTION_UP:{
screenIsBeingTouched = false;
System.out.println("screenIsBeingTouched = false");
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);
surfaceHolder.unlockCanvasAndPost(canvas);
break;
}
}
return true;
}
}
}
只需在此处更新,然后再试一次
@Override
public boolean onTouchEvent(MotionEvent event) {
//your code
return false; // UPDATE HERE
}
我给你一些提示:
当您从onTouchEvent返回false时,您将永远不会看到ACTION\u移动或ACTION\u上升。