2013-06-10 2 views
0

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

Я использую SurfaceView.setBackground(), чтобы нарисовать изображение, потому что обмен между ImageView и SurfaceView, с которым воспроизводятся видео, вызвал проблемы раньше.

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

У меня есть функция отображения нового носителя, когда старый закончен, и он также готовит следующий, когда текущий закончен. Если носитель представляет собой видеоролик, он вызывается из функции onComplete, которая работает нормально. Но если это изображение, у меня есть цикл ожидания.

Что я хочу сделать, это что-то вроде функции MediaPlayer.onComplete(), которая будет вызываться, когда изображение будет отображаться в течение требуемого времени. Есть ли что-нибудь подобное?

ответ

0

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

mHandler.postdelayed(run, delay); 

Runnable run = new Runnable(){ 

     public void run() 
     { 
      //run function 
     } 
    }; 

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

public class ImageTimer implements Runnable{ 


    private long dur, cur,start; 
    private boolean needed, run; 
    private Activity mAct; 

    ImageTimer(boolean running, long duration, Activity act) 
    { 
     run = running; 
     dur = duration; 
     needed = false; 
     mAct = act; 
    } 

    @Override 
    public void run() 
    { 
     while(run) 
     { 
      if(needed) 
      { 
       start = System.currentTimeMillis(); 
       cur = System.currentTimeMillis() - start; 
       while(cur < dur) 
       { 
        cur = System.currentTimeMillis() - start; 
       } 
       needed = false ; 
       mAct.runOnUiThread(new Runnable() 
       { 
        public void run() 
        { 

         MainActivity.ImageDone(); 
        } 

       }); 
      } 
     } 
    }