2014-01-19 104 views
0

我有一個GIF在畫布上玩。我的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的任何文檔?它究竟做了什麼?

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

ADDITIONAL TRIAL 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

那麼,如果我不叫無效它根本不動畫。所以,我希望有一種方法來控制的時候,我打電話無效,使其工作的數量。我會發布我的循環代碼,但仍然不起作用。 – 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

它的工作,但我想再次點擊按鈕時開始! – 2016-05-26 05:37:41