如何在react-native android app中显示GIF?

时间:2016-07-03 11:33:05

标签: android image react-native gif

我想在我的android react-native app中的我的Image标签中通过URL显示一个简单的gif但是当我启动它时没有显示图像。 docs中提供的代码仅适用于iOS,但不适用于Android:

<Image
  style={styles.gif}
  source={{uri: 'http://38.media.tumblr.com/9e9bd08c6e2d10561dd1fb4197df4c4e/tumblr_mfqekpMktw1rn90umo1_500.gif'}}
/>

这里有一个类似的问题但是已经说过这只适用于iOS: How do I display an animated gif in React Native?
关于此提交,它应该工作: https://github.com/facebook/react-native/commit/fcd7de5301655b39832d49908e5ca72ddaf91f7e

10 个答案:

答案 0 :(得分:41)

  

我们通过使GIF支持可选等方式使核心库更小。

因为we have to manually opt-in for gif support in Android。 将以下两行添加到依赖项下的android / app / build.gradle文件中:

compile "com.facebook.fresco:animated-gif:1.3.0"
compile "com.facebook.fresco:animated-base-support:1.3.0"

因此,您的依赖项部分可能如下所示:

dependencies {
  compile fileTree(dir: "libs", include: ["*.jar"])
  compile "com.android.support:appcompat-v7:23.0.1"
  compile "com.facebook.react:react-native:+"  // From node_modules
  compile "com.facebook.fresco:animated-gif:1.3.0"
  compile "com.facebook.fresco:animated-base-support:1.3.0"

这解决了您的调试版本的问题,但如果您想在发布版本中解决它,那么您必须将以下行添加到您的proguard-rules文件中:

-keep class com.facebook.imagepipeline.animated.factory.AnimatedFactoryImpl { public AnimatedFactoryImpl(com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory, com.facebook.imagepipeline.core.ExecutorSupplier); }

有关此内容的更多信息,请访问:https://github.com/facebook/fresco/issues/1177

这已使用此commit修复,并将包含在下一个版本中。

答案 1 :(得分:15)

以上所有内容对我来说都不适用于最新的React Native(v0.48)。我必须在android/app/build.gradle

中添加以下依赖项

compile 'com.facebook.fresco:fresco:1.5.0' compile 'com.facebook.fresco:animated-gif:1.5.0'

答案 2 :(得分:13)

您可以添加这些依赖项。我在版本(v0.44.0)中使用它:

compile 'com.facebook.fresco:animated-base-support:0.14.1'
compile 'com.facebook.fresco:animated-gif:0.14.1' 

在版本v0.50中,您只需添加

compile 'com.facebook.fresco:animated-gif:1.3.0'

答案 3 :(得分:3)

我们升级到"react-native": "^0.57.1",这使我们无法播放动画GIF;他们只是将动画的第一帧渲染为静态图像。

为纠正此问题,我们包括了以下库:

compile 'com.facebook.fresco:animated-gif:1.10.0'
compile "com.facebook.fresco:animated-base-support:1.3.0"

// (Only if supporting WebP.)
compile 'com.facebook.fresco:animated-webp:1.10.0'
compile 'com.facebook.fresco:webpsupport:1.10.0'

答案 4 :(得分:1)

从React Native Docs

构建自己的本机代码时,Android默认不支持GIF和WebP。

您需要根据应用程序的需要在android / app / build.gradle中添加一些可选模块。

dependencies {
  // If your app supports Android versions before Ice Cream Sandwich (API level 14)
  implementation 'com.facebook.fresco:animated-base-support:1.3.0'

  // For animated GIF support
  implementation 'com.facebook.fresco:animated-gif:2.0.0'

  // For WebP support, including animated WebP
  implementation 'com.facebook.fresco:animated-webp:2.1.0'
  implementation 'com.facebook.fresco:webpsupport:2.0.0'

  // For WebP support, without animations
  implementation 'com.facebook.fresco:webpsupport:2.0.0'
}

答案 5 :(得分:0)

对我来说,添加以下依赖项还不够

compile 'com.facebook.fresco:animated-gif:1.9.0'

我还必须在文件中升级gradle版本:

android / gradle / wrapper / gradle-wrapper.properties 像这样:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

以及文件中的构建工具版本:

android / build.gradle

classpath 'com.android.tools.build:gradle:3.0.1'

答案 6 :(得分:0)

如果使用RN版本.60,请尝试在应用内部build.gradle文件中添加以下内容

dependencies {
    implementation 'com.facebook.fresco:animated-gif:2.0.0'
}

Source

答案 7 :(得分:0)

对于最新版本的本机“ 0.61.5”,您需要“ 2.0.0”壁画版本;

implementation 'com.facebook.fresco:fresco:2.0.0'
implementation 'com.facebook.fresco:animated-gif:2.0.0'

答案 8 :(得分:0)

RN 64.1 中,您需要使用较新版本的 fresco 来支持 Android 中的 gif

implementation 'com.facebook.fresco:fresco:2.4.0'
// For animated GIF support
implementation 'com.facebook.fresco:animated-gif:2.4.0'
// For WebP support, including animated WebP
implementation 'com.facebook.fresco:webpsupport:2.4.0'  

frescolib ref

答案 9 :(得分:0)

默认 Android 不支持 GIF 和 WebP。所以在android项目的app级build.gradle文件中添加如下依赖并同步。

// For animated GIF support
implementation 'com.facebook.fresco:fresco:2.4.0'
implementation 'com.facebook.fresco:animated-gif:2.4.0'
// For WebP support, including animated WebP
implementation 'com.facebook.fresco:webpsupport:2.4.0'