博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Native在Android平台运行gif的解决方法转载
阅读量:5301 次
发布时间:2019-06-14

本文共 2439 字,大约阅读时间需要 8 分钟。

概述

目前RN在平台上不支持gif格式的图片,而在平台是支持的,期待以后的版本中系统也是可以默认支持Android的。首先说下在ios平台怎么加载gif呢?

  • 1
  • 1

完整实例:

xport default class Loading extends React.Component { render(){ if (!this.props.isShow) { return 
} return (
) }; } const styles = StyleSheet.create({ container:{ backgroundColor: 'transparent', position: 'absolute', top: 0, left: 0, height: Util.screenSizeUtil.height, width: Util.screenSizeUtil.width, alignItems: 'center', justifyContent: 'center', }, loading:{ height:30, width:30, }, })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

RN在Android平台的解决方法

facebook fresco方法

要解决上面的问题,方法还是很多的,最简单的莫过于使用facebook的jar支持库,在android/app/build.gradle文件中新增

compile 'com.facebook.fresco:animated-gif:0.13.0'
  • 1
  • 2
  • 1
  • 2

Fresco是一个强大的图片加载组件,Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。

如我们运行一个名为loading.gif的图片:

  • 1
  • 1

当然网上还有另外的方法,就是自己去实现读取gif图片,对图片资源做拆解,这有点类似于,在很久以前,Android平台也是不支持gif的,出现了自定义view对gif图片进行拆解,然后运行image的方案。有点类似于Android的帧动画,在xml定义图片数组,然后使用Animator来加载。不过这种方法性能差。

自定义组件实现

将gif切成15张png的图片,暂且命名为loading1、loading2…. loading15。

在构造方法中初始化图片数组

//图片数组  var loading_imgs = new Array();  //最大图片张数 const imageLength = 15; //动画使用的数组下标 const imageIndex = 0; constructor(props) { super(props); this.state = { dataSource: new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2,}), …. imageIndex:imageIndex, }; //组装图片数组 共15张图片 loading1 -> loading15 for( i=1;i<= imageLength;i++){ let loadingUri = "loading" + i; let img = ; loading_imgs.push(img); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

也没渲染

render() {    return (        
{ loading_imgs.map((item,i)=> loading_imgs[i]) }
)};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

轮播图片

每隔100毫秒切换一张图片,当数据加载完毕,清楚定时任务,并且将图片置为第一张。

图片轮播函数    _loop() {      this.loopCount++;      if (this.loopCount < loading_imgs.length) {          this.setState({              imageIndex: this.loopCount, }); }else { this.loopCount = -1; } } //轮播图片 this.timerPic = setInterval(this._loop.bind(this), 100); //清除图片轮播效果 this.timer1 && clearInterval(this.timer1); this.loopCount = -1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这样就实现了自己实现对gif运行的实现,不过其性能确实太差,建议使用第一种。

转载于:https://www.cnblogs.com/ydkf85/p/6417309.html

你可能感兴趣的文章
angularJS--apply() 和digest()方法
查看>>
Alpha 冲刺 (5/10)
查看>>
PHP函数之$_SERVER
查看>>
利用安装光盘创建本地yum源补装 RPM 软件包-通过命令行模式
查看>>
XML通過XSD產生CLASS
查看>>
跨线程调用窗体控件
查看>>
linq to sql 扩展方法
查看>>
241. Different Ways to Add Parentheses
查看>>
实验10 编写子程序 1.显示字符串
查看>>
Effect-Compiler Tool(fxc.exe)
查看>>
django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决
查看>>
常见HTTP状态码(200、301、302、500等)
查看>>
解决随机数生成的坐标在对角线上的问题
查看>>
ps aux 状态介绍
查看>>
二级指针内存模型
查看>>
bzoj千题计划140:bzoj4519: [Cqoi2016]不同的最小割
查看>>
GitHub开源项目SlidingMenu简介
查看>>
栈的链表实现
查看>>
HTML5实现全兼容的下拉刷新功能
查看>>
一次 Mysql 字符集的报错,最后让我万马奔腾!!!
查看>>