2013-08-19 180 views
1

如何获取正在播放的gif动画的持续时间?我想要有它的持续时间,我正在使用电影类和动画是一个单一的循环。但是因为电影类,它一次又一次地播放。我能知道如何获得单个循环的持续时间?获取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

duration()rerurn是什么? – 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()给你一个循环的持续时间。