2013-04-30 90 views
3

我發現了有關如何在Android中播放GIF動畫的教程,方法是從資源中讀取動畫或使用可繪製對象。但我想要的是從SD卡讀取gif文件。 我已經改變了從資產中讀取gif的項目。Android-從文件中播放GIF動畫

在主要活動,我基本上創造gifMovieView然後setContent(gifMovieView) 在GifMovieView類的構造函數,我初始化了Movie對象就像在項目範圍「eu.andlabs.tutorial.animatedgifs」。但我已經使用decodeFile給出文件路徑而不是decodeStream獲取inputStream。

File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),"piggy.gif"); 

    if(file.exists()){ 

      mMovie = Movie.decodeFile(file.getPath()); 
    } 

我有這個行的GİVENI/O EXCEPTION。它找到該文件,但decodeFile發出異常。

在onDraw;

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    super.onDraw(canvas); 
    final long now = SystemClock.uptimeMillis(); 

    if (mMoviestart == 0) { 
     mMoviestart = now; 
    } 


    Log.i("",""+mMovie.duration()); 

    Log.i("",""+mMoviestart); 

    final int relTime = (int)((now - mMoviestart) % mMovie.duration()); 
    mMovie.setTime(relTime); 
    mMovie.draw(canvas, 10, 10); 
    this.invalidate(); 
} 

由於例外,movie.duration變爲0導致錯誤。

有什麼建議嗎?

預先感謝您

https://gist.github.com/beyzakokcan/5488897/raw/e9c2afbf941d06ed0f1d3b75dc3d100ff9d7ee85/GifMovieView.java

+0

安置自己的logcat的。 – 323go 2013-04-30 14:24:11

回答

5

使用動畫:

1 - 提取您的GIF在Link和繪製文件夾中保存圖像

2 - 創建文件夾繪製image_background_animation.xml ,其中「img_weel」是從gif中提取的圖像:

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false" > 

    <item 
     android:drawable="@drawable/img_weel_1" 
     android:duration="100"/> 
    <item 
     android:drawable="@drawable/img_weel_2" 
     android:duration="100"/> 
    <item 
     android:drawable="@drawable/img_weel_3" 
     android:duration="100"/> 

</animation-list> 

3 - 在Java代碼:

ImageView imgWheel = (ImageView) findViewById(R.id.img_wheel); 
imgWheel.setBackgroundResource(R.drawable.image_background_animation); 

AnimationDrawable frameAnimation = (AnimationDrawable) imgWheel.getBackground(); 
frameAnimation.start(); 

4 - 如果你想要的動畫確定的時間:

new CountDownTimer(3000, 100) { 
void onFinish() { 
    frameAnimation.stop(); 
    } 
}.start(); 

here

+0

謝謝。我也發現了Android開發人員谷歌組的另一個答案。 – Beyza 2013-05-02 13:37:21

+4

你爲什麼不在這裏發佈其他答案。只是鏈接。這對其他人會有幫助。 – Tony 2013-10-07 18:10:46

+0

@Beyza你如何解決這個問題? – Hamza 2017-11-03 20:54:52