2014-01-19 4 views
0

У меня есть gif, играющий на холсте. Мой gif продолжает зацикливаться. Кто-нибудь знает, как определить это из цикла? вот мой код:Как остановить gif от цикла в android

if (movieStart == 0) { 
     movieStart = (int) now; 
    } 
    if (mMovie != null) { 
     int relTime = (int) ((now - movieStart) % mMovie.duration()); 
     mMovie.setTime(relTime); 
     mMovie.draw(canvas, getWidth()/2 - mMovie.width(), getHeight()/2 
      - mMovie.height()); 
    this.invalidate(); 
    } 

Мое предположение, если я играю с setTime, я мог бы заставить его работать хорошо. Но я не могу найти какие-либо документы для setTime? Что он делает точно?

ДОПОЛНИТЕЛЬНЫЕ ИСПЫТАНИЯ 1

if (movieStart == 0) { 
     movieStart = (int) now; 
    } 
    while (mMovieLoop-- > 0) { 
     if (mMovie != null) { 
      int relTime = (int) ((now - movieStart) % mMovie.duration()); 
      mMovie.setTime(relTime); 
      mMovie.draw(canvas, getWidth()/2 - mMovie.width(), getHeight()/2 
       - mMovie.height()); 

      this.invalidate(); 
     } 
    } 

ДОПОЛНИТЕЛЬНЫЕ ИСПЫТАНИЯ 2

if (movieStart == 0) { 
     movieStart = (int) now; 
    } 
    if (mMovie != null) { 
     int relTime = (int) ((now - movieStart) % mMovie.duration()); 
     mMovie.setTime(relTime); 
     mMovie.draw(canvas, getWidth()/2 - mMovie.width(), getHeight()/2 
      - mMovie.height()); 
     while (mMovieLoop-- > 0) { 
      this.invalidate(); 
     } 
    } 

Кроме того, мой GIF состоит из 4-х кадров.

+0

Я вполне уверен, что gif предназначен для циклического повторения. Именно так создается анимация .gif. –

+0

Ну, если я не называю invalidate, он не оживляет вообще. Поэтому я надеялся, что есть способ контролировать количество раз, когда я называю invalidate, чтобы заставить его работать. Я напишу свой код цикла, который все еще не работает. – learner

ответ

4

Если вы хотите только воспроизвести анимированный gif один раз, прекратите звонить invalidate(), как только вы пройдете длительность.

if (movieStart == 0) { 
    movieStart = (int) now; 
} 

if (mMovie != null) { 
    int relTime = (int) (now - moviestart); 

    if (relTime > mMovie.duration()) { 
    relTime = mMovie.duration(); 
    } 

    mMovie.setTime(relTime); 
    mMovie.draw(canvas, 
     getWidth()/2 - mMovie.width()/2, 
     getHeight()/2 - mMovie.height()/2); 

    if (relTime < mMovie.duration()) { 
    invalidate(); 
    } 
} 
+0

Он работает, но я хочу начать снова, когда нажимаем на кнопку !!! –

Смежные вопросы