2013-08-19 4 views
1

Как я могу получить продолжительность анимации gif, которая играет? Я хочу иметь свою продолжительность, я использую класс Movie, и анимация имеет один цикл. Но из-за класса Movie он воспроизводится снова и снова. Могу ли я узнать, как я могу получить продолжительность одного цикла?получить продолжительность анимации gif

public class GIFView extends View { 

    private Movie mMovie; 
    private long movieStart; 

    public GIFView(Context context) { 
     super(context); 
     initializeView(); 
    } 

    public GIFView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initializeView(); 
    } 

    public GIFView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initializeView(); 
    } 

    private void initializeView() { 
     InputStream is = getContext().getResources().openRawResource(
       R.drawable.imageedit_ball); 
     mMovie = Movie.decodeStream(is); 
    } 

    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.TRANSPARENT); 
     super.onDraw(canvas); 
     long now = android.os.SystemClock.uptimeMillis(); 

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


     } 
    }} 
+0

какой срок() повторный? – pskink

+0

Я ничего не знаю, как я могу напечатать значение продолжительности? – Meghs

+0

использовать Log.d() и adb logcat – pskink

ответ

0

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

mMovie.duration() дает вам продолжительность одного цикла.