Reactjs 如何以网格布局显示视频并在媒体上播放

Reactjs 如何以网格布局显示视频并在媒体上播放,reactjs,react-native,grid-layout,Reactjs,React Native,Grid Layout,我正在网格布局中显示一组图像。但当我将视频url添加到同一个页面时,网格布局中不会显示任何内容。我看到的只是一片空白。如何将视频添加到网格布局中,并按模式播放 我的GridLayout代码: import React, {Component} from 'react'; import {Platform, StyleSheet, Text, View, TouchableWithoutFeedback, Modal, Dimensions, ScrollView} from 'react-nat

我正在网格布局中显示一组图像。但当我将视频url添加到同一个页面时,网格布局中不会显示任何内容。我看到的只是一片空白。如何将视频添加到网格布局中,并按模式播放

我的GridLayout代码:

import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View, TouchableWithoutFeedback, Modal, Dimensions, ScrollView} from 'react-native';

import ImageElement from './ImageElement';

export default class GridLayoutSample extends Component{
  constructor(){
    super()
  this.state={
    modalVisible: false,
    modalImage: require('./download (1).jpeg'),
    images:[
      require('./download.png'),
      require('./android/app/img/51049911-nice-france-august-15-2015-subway-fast-food-restaurant-interior-subway-is-an-american-fast-food-rest.jpg'),
      require('./android/app/img/dominos.jpg'),
      require('./android/app/img/0.jpeg'),
      //{ uri: "https://luehangs.site/pic-chat-app-images/animals-avian-beach-760984.jpg" },
                //{ url: "https://luehangs.site/pic-chat-app-images/beautiful-beautiful-woman-beauty-9763.jpg" },
                //{ URL: "https://luehangs.site/pic-chat-app-images/attractive-balance-beautiful-186263.jpg" },
    ]
  }
}

setModalVisible(visible, imagekey){
  this.setState({modalImage: this.state.images[imagekey]});
  this.setState({modalVisible: visible});
}

getImage(){
  return this.state.modalImage;
}
  render(){
    let images = this.state.images.map((val,key) => {
      return<TouchableWithoutFeedback key={key}
      onPress={()=> {this.setModalVisible(true, key)}}>
      <View style={styles.imagewrap}>
      <ImageElement imgsource={val}></ImageElement>
      </View>
      </TouchableWithoutFeedback>
    });
    return(
      <View style={styles.container}>


      <Modal style={styles.modal} animationType={'fade'}
      transparent={true} visible={this.state.modalVisible} onRequestClose={()=>{}}>

      <View style={styles.modal}>
      <Text style={styles.text} onPress={()=>{
        this.setModalVisible(false)}}>Close</Text>
        <ImageElement imgsource={this.state.modalImage}></ImageElement>   
      </View>

      </Modal>
      {images}
      </View>
    )
  }
}

const styles = StyleSheet.create({
container:{
  flex: 1,
  flexDirection: 'row',
  flexWrap: 'wrap',
  backgroundColor: '#eee',
},
imagewrap:{
  margin: 2,
  padding: 2,
  height: (Dimensions.get('window').height/3)-12,
  width: (Dimensions.get('window').width/2)-4,
  backgroundColor: '#fff',
},
modal:{
  flex:1,
  padding: 40,
  backgroundColor: 'rgba(0,0,0, 0.9)',
},
text:{
  color: '#fff',
},
})
import React,{Component}来自'React';
从“react native”导入{平台、样式表、文本、视图、无反馈触摸屏、模态、维度、滚动视图};
从“./ImageElement”导入ImageElement;
导出默认类GridLayoutSample扩展组件{
构造函数(){
超级()
这个州={
modalVisible:错误,
modalImage:require('./下载(1.jpeg)),
图像:[
需要('./download.png'),
要求(“./android/app/img/51049911-nice-france-august-15-2015-subway-fast-food-restaurant-interior-subway-is-an-american-fast-food-rest.jpg”),
要求('./android/app/img/dominos.jpg'),
要求('./android/app/img/0.jpeg'),
//{uri:“https://luehangs.site/pic-chat-app-images/animals-avian-beach-760984.jpg" },
//{url:“https://luehangs.site/pic-chat-app-images/beautiful-beautiful-woman-beauty-9763.jpg" },
//{URL:“https://luehangs.site/pic-chat-app-images/attractive-balance-beautiful-186263.jpg" },
]
}
}
setModalVisible(可见,图像键){
this.setState({modalImage:this.state.images[imagekey]});
this.setState({modalVisible:visible});
}
getImage(){
返回此.state.modalImage;
}
render(){
让images=this.state.images.map((val,key)=>{
返回{this.setModalVisible(true,key)}>
});
返回(
{}}>
{
this.setModalVisible(false)}>Close
{图像}
)
}
}
const styles=StyleSheet.create({
容器:{
弹性:1,
flexDirection:'行',
flexWrap:“wrap”,
背景颜色:“#eee”,
},
图像包裹:{
差额:2,
填充:2,
高度:(尺寸.get('window')。高度/3)-12,
宽度:(尺寸.get('window')。宽度/2)-4,
背景颜色:“#fff”,
},
模态:{
弹性:1,
填充:40,
背景颜色:“rgba(0,0,0,0.9)”,
},
正文:{
颜色:“#fff”,
},
})
ImageElement.js:这是ImageElement.js的代码

import React,{Component}来自'React';
从“react native”导入{平台、样式表、文本、视图、图像};
导出默认类GridLayoutSample扩展组件{
render(){
返回(
)
}
}
const styles=StyleSheet.create({
图片:{
弹性:1,
宽度:空,
自我定位:“拉伸”,
}
})
是否已安装用于在应用程序中渲染视频的软件。如果是,那么我曾经经历过同样的问题。我所做的是我们没有来自react native video的缩略图支持。我是这样做的

<Video
      source={{ uri: source of your video }}
      style={[{ width: null, height: null, flex:1 }]}
      paused
 />

这将暂停视频并显示为图像(视频的第一帧),使用TouchableOpacity将其嵌入。点击全屏模式下的显示

希望它能对您有所帮助。

您是否已在应用程序中安装用于渲染视频的软件。如果是,那么我曾经经历过同样的问题。我所做的是我们没有来自react native video的缩略图支持。我是这样做的

<Video
      source={{ uri: source of your video }}
      style={[{ width: null, height: null, flex:1 }]}
      paused
 />

这将暂停视频并显示为图像(视频的第一帧),使用TouchableOpacity将其嵌入。点击全屏模式下的显示


希望它能帮助您。

传递到
图像的视频url
标记不会显示任何图像

您可以传递表示视频的缩略图。按下图像,打开模式并播放视频。我建议您使用此库播放视频。它附带了附加的视频播放器组件,并且是在
react native video
上构建的。加载视频时,软件包会自动加载缩略图,或者如果您希望有道具添加您自己的缩略图


希望这有帮助。如果您需要任何示例代码,请发表评论。

传递到
图像的视频url
标记不会显示任何图像

您可以传递表示视频的缩略图。按下图像,打开模式并播放视频。我建议您使用此库播放视频。它附带了附加的视频播放器组件,并且是在
react native video
上构建的。加载视频时,软件包会自动加载缩略图,或者如果您希望有道具添加您自己的缩略图


希望这有帮助。如果您需要任何示例代码,请发表评论。

谢谢。如果您能发布一个示例代码,将非常有用。PS:我正在尝试在gridlayout中同时显示图像和视频。你能分享一下你想要实现的设计示例吗。这将有助于我帮助你与一个示例代码。在网格布局中,我想显示图像和视频文件。按下图像时,模式打开并显示图像。同样地,对于媒体上的视频,它应该播放。但是你如何识别它是图像还是视频呢。我也经历过同样的问题,但无论是视频还是图像,我都得到了后端的响应。你能得到同样的吗???@AbhirupMukherjee加入这个房间。谢谢你,罗恩。如果您能发布一个示例代码,将非常有用。PS:我正在尝试在gridlayout中同时显示图像和视频。你能分享一下你想要实现的设计示例吗。这将有助于我帮助你与一个示例代码。在网格布局中,我想显示图像和视频文件。按下图像时,模式打开并显示图像。同样地,对于媒体上的视频,它应该播放。但是你如何识别它是图像还是视频呢。我也经历过同样的问题,但无论是视频还是图像,我都得到了后端的响应。你能得到同样的吗???@AbhirupMukherjee加入这个房间。你好,曼尼希。你能和我分享一个示例代码吗?这将帮助我更好地理解。谢谢嗨,Abhirup,我已经提供了你需要重新修改的代码