Как остановить GIF от зацикливания в Android

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

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();
        }
    }

Также мой подарок сделан из 4 кадров.

1 ответ

Решение

Если вы хотите сыграть анимированный 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();
  }
}
Другие вопросы по тегам