Как скрыть макет, когда экран остается нетронутым пользователем? - PullRequest
1 голос
/ 09 декабря 2011

Я использую OnTouchListener для отображения layout1, пока экран был сенсорным.Теперь я хочу невидимый layout1, пока экран не трогал три секунды.Но я не знаю, какой приемник событий я могу использовать?

Теперь проблема решена.Но появился еще один.Я использую:

class unTouchTask extends TimerTask {
public void run() {
if(untouch == true) {
RelativeLayout rl = (
RelativeLayout)findViewById(R.id.relativeLayout2);
rl.setVisibility(View.INVISIBLE);
timer.cancel();
untouch = false;}
}
    }

Ниже ошибка в строке rl.setVisibility(View.INVISIBLE);:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Опция 1: вам нужно запустить таймер, чтобы отследить время неактивного вмешательства пользователя, и при каждом касании пользователя вам нужно будет сбросить таймер.

Код вашего таймера, как показано ниже:

class UpdateTimeTask extends TimerTask {
   public void run() {

       //hide your layout

   }

}

И в обработчике событий для запуска этого обновления используется следующий экземпляр Timer ():

if(startTime == 0L) {
   startTime = evt.getWhen();
   timer = new Timer();
   timer.schedule(new UpdateTimeTask(), 300, 200);
}

ПРИМЕЧАНИЕ. В частности, обратите внимание на параметры 300, 200. Первый параметр означает ожидание 300 мс, прежде чем запускать задачу обновления часов в первый раз. Второе средство повторяется каждые 200 мс после этого, пока не остановится.

Вариант 2: К счастью, роль Таймера можно заменить на класс android.os.Handler с несколькими изменениями

Более подробный пример вы можете получить на http://www.vogella.de/articles/AndroidPerformance/article.html

Привет.

1 голос
/ 09 декабря 2011

Вы получаете эту ошибку, потому что вы можете использовать потоки, но все представления и все API, связанные с представлениями, должны вызываться из основного потока (также называемого потоком пользовательского интерфейса). Поэтому решение этой проблемы заключается в использовании обработчика. Обработчик - это объект, который будет отправлять вам сообщения обратно в поток пользовательского интерфейса. http://developer.android.com/reference/android/os/Handler.html поможет вам обработчики кода.

Второй вариант - использовать runOnUiThread . Вот что я делаю в своей теме:

runOnUiThread(new Runnable() {
    public void run() {
        titleProgress.setVisibility(View.VISIBLE);
    }
});
//long operation here
runOnUiThread(new Runnable() {
    public void run() {
       titleProgress.setVisibility(View.INVISIBLE);
    }
});
1 голос
/ 09 декабря 2011

Вы можете использовать Timer и TimerTask, чтобы запланировать что-то происходящее во временном интервале Если пользователь когда-либо касается экрана, отмените таймер и сбросьте его. Вам понадобится материал, связанный с пользовательским интерфейсом, в потоке пользовательского интерфейса. Эта статья даст вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...