- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 Flatlist 和下面的库实现了视频滚动。
react-native-video
react-native-orientation
单击播放按钮时,它会在同一帧中启动视频,如下所示:
我想在点击播放按钮时以横向全屏播放视频,在点击关闭按钮时它应该像在纵向模式下一样。
使用的依赖项:
"dependencies": {
"axios": "^0.18.0",
"native-base": "^2.7.2",
"prop-types": "^15.6.2",
"react": "16.4.1",
"react-native": "0.56.0",
"react-native-orientation": "^3.1.3",
"react-native-vector-icons": "^4.6.0",
"react-native-video": "^3.1.0",
"react-navigation": "^2.8.0"
},
当前实现的代码:
return (
<View style={styles.flatList}>
<View style={styles.image}>
<Video
source={{
uri: item.video_url
}}
ref={ref => {
this.player = ref;
}}
onEnd={() => {}}
style={styles.videoContainer}
paused={this.state.paused}
muted={this.state.muted}
repeat={this.state.repeat}
controls={true}
/>
</View>
<Text style={styles.itemTitle}> {item.title} </Text>
</View>
);
最佳答案
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow
*/
import React, { Component } from "react";
import {
StyleSheet,
Text,
View,
FlatList,
TouchableHighlight,
ActivityIndicator,
SafeAreaView,
Image,
Modal,
Dimensions
} from "react-native";
import MaterialIcons from "react-native-vector-icons/MaterialIcons";
import { Container, Content, Header, Body, Title } from "native-base";
import Video from "react-native-video";
import Orientation from "react-native-orientation";
import VideoActions from "../Redux/VideoRedux";
import { connect } from "react-redux";
// Styles
import styles from "./Styles/VideoListScreenStyles";
class LaunchScreen extends Component {
static navigationOptions = {
header: null
};
constructor(props) {
super(props);
this.state = {
isLoading: false,
isLoadingMore: false,
loading: true,
dataSource: [],
video_url: "",
data: [],
status: false,
muted: false,
paused: true,
repeat: false,
videos: []
};
}
apiParsing() {
const axios = require("axios");
axios
.get("https://private-c31a5-task27.apiary-mock.com/videos")
.then(response => {
// handle success
this.setState({
isLoading: false,
dataSource: response.data.videos,
data: response.data.videos
});
console.log(response.data.videos);
})
.catch(error => {
// handle error
console.log(error);
})
.then(() => {
// always executed
});
}
fetchMore = () => {
const data = this.state.data.concat(this.state.dataSource);
this.setState({
isLoading: false,
data: data
});
};
componentDidMount() {
// this.apiParsing();
// Orientation.unlockAllOrientations();
this.props.getVideos();
Orientation.addOrientationListener(this._orientationDidChange);
}
static getDerivedStateFromProps(props, state) {
props.videos ? { videos: props.videos } : null;
return null;
}
_orientationDidChange = orientation => {
if (orientation === "LANDSCAPE") {
console.log("Landscape Mode On");
} else {
}
};
// componentWillUnmount() {
// Orientation.getOrientation((err, orientation) => {
// console.log(`Current Device Orientation: ${orientation}`);
// });
// Orientation.removeOrientationListener(this._orientationDidChange);
// }
handlePlayAndPause = item => {
this.setState(prevState => ({
paused: !prevState.paused,
video_url: item.video_url
}));
};
handleVolume = () => {
this.setState(prevState => ({
muted: !prevState.muted
}));
};
handleRepeat = () => {
this.setState(prevState => ({
repeat: !prevState.repeat
}));
};
handleFullScreenToPortrait = () => {
Orientation.lockToPortrait();
this.setState({
video_url: "",
paused: true
});
};
handleFullScreenToLandscape = () => {
this.player.presentFullscreenPlayer();
Orientation.lockToLandscape();
};
onEndVideo = () => {
this.player.dismissFullscreenPlayer();
Orientation.lockToPortrait();
this.setState({
video_url: "",
paused: true
});
};
renderFooter = () => {
if (!this.state.loading) return null;
return (
this.state.isLoadingMore && (
<View
style={{
paddingVertical: 10,
// borderTopWidth: 1,
borderColor: "#CED0CE"
}}
>
<ActivityIndicator animating size="large" />
</View>
)
);
};
renderItem(item) {
console.log("Image URL", item.thumbnail_url);
return (
<View style={styles.faltList}>
<View style={styles.image}>
<Image
style={styles.image}
source={{
uri: item.thumbnail_url
}}
resizeMode="cover"
/>
<View style={styles.controlBar}>
<MaterialIcons
name={this.state.paused ? "play-arrow" : "pause"}
size={45}
color="white"
onPress={() => this.handlePlayAndPause(item)}
/>
</View>
</View>
<Text style={styles.welcome}> {item.title} </Text>
</View>
);
}
render() {
console.log("Image URL", this.props.videos);
if (this.state.isLoading) {
return (
<View style={styles.activityIndicator}>
<ActivityIndicator />
</View>
);
}
return (
<Container>
<Header>
<Body>
<Title> Videos </Title>
</Body>
</Header>
<View style={styles.container}>
<SafeAreaView>
{this.state.video_url ? (
<Video
source={{
uri: this.state.video_url
}}
ref={ref => {
this.player = ref;
}}
onEnd={this.onEndVideo}
onLoadStart={this.handleFullScreenToLandscape}
// style={styles.videoContainer}
paused={this.state.paused}
muted={this.state.muted}
repeat={this.state.repeat}
onFullscreenPlayerDidDismiss={() =>
this.handleFullScreenToPortrait()
}
/>
) : null}
<FlatList
data={this.props.videos}
renderItem={({ item }) => this.renderItem(item)}
keyExtractor={(item, index) => index.toString()}
showsVerticalScrollIndicator={false}
showsHorizontalScrollIndicator={false}
ListFooterComponent={this.renderFooter}
onEndReached={() =>
this.setState({ isLoadingMore: true }, () => this.fetchMore())
}
onEndReachedThreshold={0.01}
/>
</SafeAreaView>
</View>
</Container>
);
}
}
const mapStateToProps = state => ({
videos: state.videos.videos
});
const mapDispatchToProps = dispatch => ({
getVideos: () => dispatch(VideoActions.videoRequest())
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(LaunchScreen);
关于android - 使用 Flatlist 单击播放按钮即可全屏(横向)播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539126/
我对此很陌生,我在这里的论坛上检查过答案,但我没有找到任何真正可以帮助我的答案。我正在尝试播放 res/raw 文件夹中的视频。到目前为止我已经设置了这段代码: MediaPlayer mp; @Ov
我可以播放一个视频剪辑,检测视频的结尾,然后创建一个表单,然后播放另一个视频剪辑。我的问题是,表单 react 不正确,我创建了带有提交按钮和两个单选按钮可供选择的表单。我希望让用户进行选择,验证响应
首先,我必须说我在web2py讨论组中看到过类似的内容,但我不太理解。 我使用 web2py 设置了一个数据库驱动的网站,其中的条目只是 HTML 文本。其中大多数将包含 img和/或video指向相
我正在尝试在视频 View 中播放 YouTube 视频。 我将 xml 布局如下: 代码是这样的: setContentView(R.layout.webview); VideoV
我正在开发一个需要嵌入其中的 youtube 视频播放器的 android 应用程序。我成功地从 API 获得了 RTSP 视频 URL,但是当我试图在我的 android 视频 View 中加载这个
我目前正在从事一个使用 YouTube API 的网络项目。 我完全不熟悉 API。所以每一行代码都需要付出很多努力。 使用以下代码,我可以成功检索播放列表中的项目: https://www.goog
是否可以仅使用视频 ID 和 key 使用 API V3 删除 youtube 视频?我不断收到有关“必需参数:部分”丢失的错误消息。我用服务器和浏览器 api 键试了一下这是我的代码: // $yo
所以我一直坚持这个大约一个小时左右,我就是无法让它工作。到目前为止,我一直在尝试从字符串中提取整个链接,但现在我觉得只获取视频 ID 可能更容易。 RegEx 需要从以下链接样式中获取 ID/URL,
var app = angular.module('speakout', []).config( function($sceDelegateProvider) {
我正在努力从 RSS 提要中阅读音频、视频新闻。我如何确定该 rss 是用于新闻阅读器还是用于音频或视频? 这是视频源:http://feeds.cbsnews.com/CBSNewsVideo 这是
利用python反转图片/视频 准备:一张图片/一段视频 python库:pillow,moviepy 安装库 ?
我希望在用户双击视频区域时让我的视频全屏显示,而不仅仅是在他们单击控件中的小图标时。有没有办法添加事件或其他东西来控制用户点击视频时发生的情况? 谢谢! 最佳答案 按照 Musa 的建议,附
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个公司培训视频加载到本地服务器上。我正在使用 HTML5 的视频播放来观看这些视频。该服务器无法访问网络,但我已加载 apache 并且端口 8080 对同一网络上的所有机器开放。 这些文件位于
我想混合来自 video.mp4 的视频(时长 1 分钟)和来自 audio.mp3 的音频(10 分钟持续时间)到一个持续时间为 1 分钟的输出文件中。来自 audio.mp3 的音频应该是从 4
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我正在尝试使用 peer/getUserMedia 创建一个视频 session 网络应用程序。 目前,当我将唯一 ID 发送到视频 session 时,我能够听到/看到任何加入我的 session
考虑到一段时间内的观看次数,我正在评估一种针对半自动脚本的不同方法,该脚本将对视频元数据执行操作。 简而言之,只要视频达到指标中的某个阈值,就说观看次数,它将触发某些操作。 现在要执行此操作,我将不得
我正在通过iBooks创建专门为iPad创建动态ePub电子书的网站。 它需要支持youtube视频播放,所以当我知道视频的直接路径时,我正在使用html5 标记。 有没有一种使用html5 标签嵌入
我对Android不熟悉,我想浏览youtube.com并在Webview内从网站显示视频。当前,当我尝试执行此操作时,将出现设备的浏览器,并让我使用设备浏览器浏览该站点。如果Webview不具备这种
我是一名优秀的程序员,十分优秀!