【问题标题】:Android- play animated gifs from a fileAndroid-从文件中播放动画 GIF
【发布时间】:2013-04-30 14:13:25
【问题描述】:

我找到了有关如何在 android 中通过从资产中读取动画 gif 或使用可绘制对象来播放动画 gif 的教程。但我想要的是从 sdcard 读取 gif 文件。 我已经稍微改变了从资产中读取 gif 的项目。

在主要活动中,我基本上创建 gifMovieView 然后 setContent(gifMovieView) 在 GifMovieView 类的构造函数中,我像在项目“eu.andlabs.tutorial.animatedgifs”中一样初始化了电影对象。但我使用 decodeFile 提供文件路径而不是 decodeStream 获取 inputStream。

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

    if(file.exists()){

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

我有这条线的 I/O 异常。它找到了文件,但 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

【问题讨论】:

    标签: android gif


    【解决方案1】:

    使用动画:

    1 - 在Link 中提取您的 gif 并将图像保存在可绘制文件夹中

    2 - 在 drawable 文件夹中创建 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

    【讨论】:

    • 谢谢。我还在android开发者谷歌组上找到了另一个答案。
    • 你为什么不在这里发布另一个答案呢。只是链接。这对其他人会有所帮助。
    猜你喜欢
    • 2016-12-17
    • 2012-07-10
    • 2012-08-24
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2011-11-10
    • 2021-10-15
    相关资源
    最近更新 更多