Скрыть пользовательскую панель управления Android MediaPlayer

#android #show-hide #control-panel

#Android #показать-скрыть #панель управления

Вопрос:

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

 Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(60000);
                } catch (InterruptedException e) {
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // make the panel invisible 
                    }
                });
            }
        };
  

Я могу запустить поток при касании экрана и сделать его невидимым через 60 секунд. Но в моем случае, если пользователь снова коснется экрана в промежутке между этими 60 секундами, панель должна исчезнуть через 60 секунд после последнего касания. Как также рассмотреть этот случай?

Ответ №1:

Я бы рекомендовал использовать комбинацию Runnable s и a Handler . Вы можете выполнять Handler вызовы, используя postDelayed() , чтобы сделать что-то, скажем, через 60 секунд.

Вот пример:

 private Handler mHandler = new Handler();

mHandler.post(showControls); // Call this to show the controls

private Runnable showControls = new Runnable() {    
   public void run() {
      // Code to show controls
      mHandler.removeCallbacks(showControls);
      mHandler.postDelayed(hideControls, 60000);
   }
};

private Runnable hideControls = new Runnable() {
   public void run() {
      // Code to hide the controls
   }
};
  

Комментарии:

1. я использовал это:-showControls = new Runnable() { public void run() { // Код для отображения элементов управления mHandler.removeCallbacks(showControls); controlpanel.setVisibility(Просмотр. ВИДИМЫЙ); mHandler.postDelayed(hideControls, 10000); } }; hideControls = new Runnable() { public void run() { // Код для скрытия элементов управления controlpanel.setVisibility(Просмотр. НЕВИДИМЫЙ); } }; // Но он работает в соответствии с первым касанием, кажется, что система не может отменить запуск в очереди. в чем проблема в моем коде?

2. Вы можете отменить запускаемый объект, просто вызвав mHandler.removeCallbacks() для запускаемого объекта.

Ответ №2:

Просто удалите / отмените текущий таймер.

Кстати, вы должны делать это не по потоку, а путем отправки сообщения обработчику. Такая будущая задача таймера не нуждается в другом потоке.