Wiemo
@Wiemo

Смещение координаты Y при передаче из UI потока?

Проблема такая: есть поток, в котором проходит отрисовка круга.

В ui потоке (класс основной activity) вызывается метод onTouchEvent, берущий координаты x,y и передаёт их в поток рисования (прямым присвоением классу потока) в итоге по x всё нормально, а координата y оказывается смещена на некоторое значение, т.е. кружок появляется не под пальцем, а ниже. Или всё-таки нужно использовать Handler или AsyncTask, а не тупо присваивать
public boolean onTouchEvent(MotionEvent event) {
int X = (int) event.getX();
int Y = (int) event.getY();
myThread.xx=X;
myThread.yy=Y;
return true;
}
  • Вопрос задан
  • 3045 просмотров
Пригласить эксперта
Ответы на вопрос 4
Wiemo
@Wiemo Автор вопроса
class DrawThread extends Thread {
	private boolean Flag = false;
	private SurfaceHolder surfaceHolder;

	public DrawThread(SurfaceHolder surfaceHolder, Resources resources) {
		this.surfaceHolder = surfaceHolder;

	}

	public void setRunning(boolean run) {
		Flag = run;

	}

	static boolean Flag2 = true;
	Canvas canvas;
	Paint paint = new Paint();
	static int xx = 20;
	static int yy = 20;


	


	public void run() {

		
		while (Flag) {
			canvas = null;

			try {
				canvas = surfaceHolder.lockCanvas(null);
				synchronized (surfaceHolder) {
					
					paint.setColor(Color.WHITE);
					canvas.drawPaint(paint);
					paint.setColor(Color.GREEN);
					
					if (Flag2) {
						canvas.drawCircle(xx, yy, 20, paint);
					}
					
				}
			} finally {
				if (canvas != null) {
					surfaceHolder.unlockCanvasAndPost(canvas);
				}
			}
		}
	}




	
}


Что интересно, отрисовка по начальным координатам (заданы в объявлении переменных) происходит верно.
Ответ написан
Комментировать
palmut
@palmut
Попробуйте еще умножить getX() и getY() на getXPrecision() и getYPrecision() соответственно, поскольку эти функции возвращают the precision of the Y coordinates being reported. You can multiply this number with getY() to find the actual hardware value of the Y coordinate. (цитата из документации MotionEvent).
Ответ написан
Комментировать
Wiemo
@Wiemo Автор вопроса
Не помогает такая же ерунда
Ответ написан
LeoCcoder
@LeoCcoder
Для начала сделайте передеменные xx и yy volatile. Стало лучше? Потом почитайте про многопоковость в java.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы