/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ import React, { Component } from 'react'; import { Platform, StyleSheet, Text, View, Image, TouchableOpacity, ImageBackground, FlatList, findNodeHandle, UIManager, StatusBar, BackHandler, Button, DeviceEventEmitter } from 'react-native'; import Orientation from 'react-native-orientation'; import AndroidUtil from '../../util/AndroidUtil'; import BasePage from '../BasePage'; import CourseTitle from './CourseTitle'; import SharedDialog from './SharedDialog'; import ScheduleFlatItem from './ScheduleFlatItem'; import CusVideo from './CusVideo'; import ScheduleUrl from '../services/schedule'; import wechat from '../utils/wechat'; export default class SchedulePage extends BasePage { constructor(props) { super(props); this.state = { statusbar_hidden: false, video_show: false, x: 0.0, y: 0.0, videoImg_flex: 1, videoImage_width: 0, videoImage_height: 0, videoImage_x: 0.0, videoImage_y: 0.0, video_uri: 'https://www.apple.com/105/media/cn/iphone-x/2017/01df5b43-28e4-4848-bf20-490c34a926a7/films/feature/iphone-x-feature-cn-20170912_1280x720h.mp4', title_height: '9%', video_frame_height: '32%', seat_height: '2%', flatlist_height: '60%', isFull: false, playing_key: 0, scheduleTitle: '', wareList: [], colorList: [ '#FFBC3D', '#FB5B76', '#EC48E1', '#39D6B9', '#3397F0' ] }; } render() { return ( <View style={{ flex: 1 }} > <StatusBar // backgroundColor={"transparent"} barStyle={'dark-content'} backgroundColor={'white'} translucent={false} hidden={this.state.statusbar_hidden} /> <View style={{ flex: 1, backgroundColor: '#F3F3F3', justifyContent: 'center', alignItems: 'center' }} > <View style={{ height: this.state.title_height, backgroundColor: 'white' }} > <CourseTitle width={this.getWindowWidth()} title={this.state.scheduleTitle} lefttype={1} righttype={1} textcolor={'#231F20'} backPress={() => this.goBack()} // backPress={() => alert("左侧按钮")} rightPress={this.showSharedDialog.bind(this)} /> </View> <View style={{ height: this.state.video_frame_height, width: '100%' }} > <Image source={{ uri: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556277324856&di=dc1548a0c5ba10481af922e174912937&imgtype=0&src=http%3A%2F%2Fwww.51pptmoban.com%2Fd%2Ffile%2F2012%2F05%2F12%2F82c4568a90055adcf8fbb896f0841c69.jpg' }} style={{ width: '100%', height: '100%' }} ref={(c) => { this.video_image = c; }} /> </View> <View style={{ height: this.state.seat_height }} /> <View style={{ height: this.state.flatlist_height, justifyContent: 'center', alignItems: 'center', width: '100%' }} > <FlatList ItemSeparatorComponent={() => ( <View style={{ height: 10 }} /> )} ListFooterComponent={() => ( <View style={{ height: 30 }} /> )} renderItem={({ item }) => { return this.loadFlatItem(item); }} keyExtractor={(item, index) => item.id.toString()} horizontal={false} data={this.state.wareList} /> </View> </View> <CusVideo show={this.state.video_show} uri={this.state.video_uri} ref={(view) => (this.video = view)} needback={false} videofullScreenPlayer={this.fullScreenPlayer.bind(this)} onError={this.onError.bind(this)} onEnd={this.onEnd.bind(this)} style={{ left: this.state.x, top: this.state.y, width: this.state.video_width, height: this.state.video_height, overflow: 'hidden', position: 'absolute' }} /> <SharedDialog ref={(view) => (this.shareddialog = view)} friend={this.sharedfriend.bind(this)} CircleOfFriends={this.sharedcircel.bind(this)} /> </View> ); } loadFlatItem(data) { return ( <ScheduleFlatItem width={this.getWindowWidth() * 0.9} height={50} data={data} onPress={() => this.changeUrl(data)} /> ); } componentWillMount() { BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid); } componentWillUnmount() { BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid); } componentDidMount() { const { id } = this.props.navigation.state.params; alert(id); let colorTemp = ''; let colorIndexTemp = 0; const colorList = this.state.colorList; ScheduleUrl.getSchedule('KINDERGARTEN').success((res) => { res.data.wareList.forEach((item, index) => { if (index === 0) { colorTemp = item.subTitle; } if (item.subTitle === colorTemp) { item.subColor = colorList[colorIndexTemp]; } else { colorIndexTemp++; if (colorIndexTemp > colorList.length - 1) { colorIndexTemp = 0; } colorTemp = item.subTitle; item.subColor = colorList[colorIndexTemp]; } }); this.setState({ scheduleTitle: res.data.category.title, wareList: res.data.wareList }); }); } showSharedDialog() { this.video.pause(); this.shareddialog.setModalVisible(true); } onBackAndroid = () => { if (this.state.isFull) { return true; } else { } }; onError() { alert('播放器异常'); this.setState({ video_show: false }); } onEnd() { alert('播放结束'); this.setState({ video_show: false }); this.video.refreshVideo(); } fullScreenPlayer() { if (!this.state.isFull) { Orientation.lockToLandscape(); this.setState({ video_frame_height: '100%', statusbar_hidden: true, isFull: true, x: 0, y: 0, video_width: '100%', video_height: '100%' }); } else { Orientation.lockToPortrait(); this.setState({ video_frame_height: '32%', x: this.state.videoImage_x, y: this.state.videoImage_y, video_width: this.state.videoImage_width, video_height: this.state.videoImage_height, statusbar_hidden: false, isFull: false }); } } changeUrl(data) { //切换视频并且播放 // alert(url); // if (this.state.playing_key == data.key) { // return; // } const handle = findNodeHandle(this.video_image); setTimeout(() => { UIManager.measure(handle, (x, y, width, height, pageX, pageY) => { this.setState({ x: pageX, y: pageY, video_width: width, video_height: height, videoImage_width: width, videoImage_height: height, videoImage_x: pageX, videoImage_y: pageY, video_show: true, video_uri: data.playUrl, playing_key: data.key }); }); }, 0); this.video.start(); } sharedfriend() { wechat.shareToSessionNews( '标题测试', '标题内容', 'http://www.ncloud.hk/email-signature-262x100.png', 'http://www.baidu.com' ); } sharedcircel() { wechat.shareToTimelineNews( '标题测试', '标题内容', 'http://www.ncloud.hk/email-signature-262x100.png', 'http://www.baidu.com' ); } }