Intereting Posts

Обходное решение для Android Touch

Я закончил программировать функциональную игру Android, но я не знаю, где искать исправление касания: каждый раз, когда экран коснулся, частота кадров падает вдвое. Мой код – это в основном копия и вставка LunarLander с onTouchEvent.

Поисковые запросы Google показывают мне основные способы обхода, которые, как они говорят, работают, но не работают (sleep onTouchEvent, onDispatchEvent, onInterceptTouchEvent, синхронизированы и т. Д.), И кажется, что невозможно использовать SurfaceView без огромного запаздывания во время событий касания.

Что мне делать? Должен ли я отказаться от SurfaceView, отключить onTouchEvent и использовать clickListener, как-то блокировать быстрые звонки? Пожалуйста, скажи мне, что случилось!

Я пробовал:

  • Создание onTouchEvent () не запускает код и возвращает false
  • Спящий onTouchEvent () или run () за 16/32/1000 миллисекунд, без разницы
  • Переопределение onDispatchevent () вместо onTouchEvent ()
  • Эксперимент с синхронизированным () в onTouchEvent ()

И вот мой код:

public class Surface extends SurfaceView implements SurfaceHolder.Callback { public CanvasThread canvasThread; private SurfaceHolder surfaceHolder; public Surface(Context context) { super(context); surfaceHolder = getHolder(); surfaceHolder.addCallback(this); setFocusable(true); } @Override public boolean onTouchEvent(MotionEvent event) { return canvasThread.touch(event); } class CanvasThread extends Thread { @Override public void run() { synchronized (this) { // game logic } } public boolean touch(MotionEvent event) { // touch logic } } }