Поверхность Android на TouchEvent ограничивает? - PullRequest
0 голосов
/ 16 июня 2011

Если у вас есть класс SurfaceView, используемый для анимации / игры / ..., у вас есть метод onTouchEvent () и метод рисования / обновления экрана в том же классе.Теперь я хочу просто спать метод onTouchEvent, чтобы он не вызывался + -80 раз в секунду и не загружал процессор (и, следовательно, вызывал задержку).Проблема в том, что если я сплю этот класс, он также перестает рисовать.

** Edit88 Я пытаюсь остановить onTouchEvent (), чтобы вызываться слишком часто.моя попытка:

@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("firstTest",Integer.toString(event.getAction()));   //shows up
if (!sleeper.CurrentlySleeping) {
    Log.d("2ndTest",Integer.toString(event.getAction())); //not showing up
    ~~  some calculations and stuff  ~~

.

public class TouchSleeper extends Thread {
// If Thread is sleeping or not.
public static Boolean CurrentlySleeping;
public TouchSleeper() {
CurrentlySleeping = false;
this.setPriority(MIN_PRIORITY);
}

@Override
public void run() {
try {
    while (true) {
        CurrentlySleeping = true;
        TouchSleeper.sleep(50);
        CurrentlySleeping = false; }
    ~end~

Сначала кусок кода из моего класса SurfaceView.Второй кусок класса / потока, который постоянно меняет логическое значение.Обратите внимание, что мой первый Log.d что-то возвращает, а второй нет.Это говорит мне, что В настоящее время Спящий никогда не ложь?Я до сих пор не разобрался ...?

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Я думаю, что было бы проще не слушать события onTouch в первую очередь вместо того, чтобы блокировать код обработки, когда событие onTouch происходит, в этом случае у вас все еще будут накладные расходы при вызове функции (и в этом случае, когда ты этого не хочешь)

Так что реализуйте интерфейс onTouchListener и установите его для вида, используя setOnTouchListener. Теперь, когда вы не хотите слушать какие-либо события onTouch для представления, установите для него значение NULL.

Теперь вместо использования режима сна попробуйте использовать Alarm или отправить отложенное сообщение вашему обработчику потока, чтобы сбросить onTouchListener для представления в более поздний момент времени. (Лично я думаю, что это намного аккуратнее, чем спать :))

0 голосов
/ 16 июня 2011

Если у класса есть метод onTouchEvent, вы не можете предотвратить его вызов. Просто сделайте так, чтобы onTouchEvent вернул false и больше ничего не делали.

...