У меня настоящие проблемы с работой с моей нитью. Проще говоря, я хочу, чтобы красный квадрат появлялся на экране, когда он касался и исчезал, когда ничто не касается экрана. Мне удалось заставить это работать.Остановка нити при возникновении ACTION_UP
Теперь я пытаюсь реализовать его так, чтобы при касании экрана появился красный квадрат, но затем он начинает двигаться к пальцу. Я думал, что сделаю это, если поток будет запущен, когда коснется экран, который обновит координаты X & Y. Я попробую это, как только я заставлю поток начать и остановить ACTION_DOWN и ACTION-UP.
Я попытался реализовать поток, который просто печатает на выходе системы, и вызывается, когда экран коснулся, но не останавливается, когда я удаляю палец. Я попробовал только запустить поток, когда логическое значение true. (это устанавливается, когда происходит ACTION_DOWN. Затем я установил ACTION_UP, чтобы сделать его ложным.
Я где-то читал, что он не работает, потому что поток должен завершиться до того, как он остановится или что-то еще. Но я не понимаю это.
Если кто-то может показать мне, где я не так, и объяснить это мне было бы очень высокую оценку.
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;
}
}
}
Вы никогда не увидите ACTION_MOVE или ACTION_UP, когда вы вернете false из onTouchEvent. – Mark