Как остановить 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();
}
}