亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

react-native-video實現(xiàn)視頻全屏播放的方法

 更新時間:2018年03月19日 09:32:34   作者:不變旋律  
這篇文章主要介紹了react-native-video實現(xiàn)視頻全屏播放的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

react-native-video 是github上一個專用于React Native做視頻播放的組件。這個組件是React Native上功能最全最好用的視頻播放組件,還在持續(xù)開發(fā)之中,雖然還有些bug,但基本不影響使用,強力推薦。

本篇文章主要介紹下怎么使用react-native-video播放視頻,以及如何實現(xiàn)全屏播放,屏幕旋轉時視頻播放器大小隨之調(diào)整,顯示全屏或收起全屏。

首先來看看react-native-video有哪些功能。

基本功能

  1. 控制播放速率
  2. 控制音量大小
  3. 支持靜音功能
  4. 支持播放和暫停
  5. 支持后臺音頻播放
  6. 支持定制樣式,比如設置寬高
  7. 豐富的事件調(diào)用,如onLoad,onEnd,onProgress,onBuffer等等,可以通過對應的事件進行UI上的定制處理,如onBuffer時我們可以顯示一個進度條提示用戶視頻正在緩沖。
  8. 支持全屏播放,使用presentFullscreenPlayer方法。這個方法在iOS上可行,在android上不起作用。參看 issue#534 ,#726也是同樣的問題。
  9. 支持跳轉進度,使用seek方法跳轉到指定的地方進行播放
  10. 可以加載遠程視頻地址進行播放,也可以加載RN本地存放的視頻。

注意事項

react-native-video通過source屬性設置視頻,播放遠程視頻時使用uri來設置視頻地址,如下:

播放本地視頻時,使用方式如下:

source={require('../assets/video/turntable.mp4')}

需要注意的是,source屬性不能為空,uri或本地資源是必須要設置的,否則會導致app閃退。uri不能設置為空字符串,必須是一個具體的地址。

安裝配置

使用 npm i -S react-native-video 或 yarn add react-native-video 安裝,完成之后使用 react-native link react-native-video 命令link這個庫。

Android端在執(zhí)行完link命令后,gradle中就已經(jīng)完成了配置。iOS端還需要手動配置一下,這里簡單說一下,與官方說明不同的是,我們一般不使用tvOS的,選中你自己的target,在build phases中先移除掉自動link進來的 libRCTVideo.a 這個庫,然后點擊下方加號重新添加 libRCTVideo.a ,注意不要選錯。

視頻播放

實現(xiàn)視頻播放其實很簡單,我們只需要給Video組件設置一下source資源,然后設置style調(diào)整Video組件寬高就行了。

<Video
 ref={(ref) => this.videoPlayer = ref}
 source={{uri: this.state.videoUrl}}
 rate={1.0}
 volume={1.0}
 muted={false}
 resizeMode={'cover'}
 playWhenInactive={false}
 playInBackground={false}
 ignoreSilentSwitch={'ignore'}
 progressUpdateInterval={250.0}
 style={{width: this.state.videoWidth, height: this.state.videoHeight}}
/>

其中videoUrl是我們用來設置視頻地址的變量,videoWidth和videoHeight是用來控制視頻寬高的。

全屏播放的實現(xiàn)

視頻全屏播放其實就是在橫屏情況下全屏播放,豎屏一般都是非全屏的。要實現(xiàn)設備橫屏時視頻全屏顯示,說起來很簡單,就是通過改變Video組件寬高來實現(xiàn)。

上面我們把videoWidth和videoHeight存放在state中,目的就是為了通過改變兩個變量的值來刷新UI,使視頻寬高能隨之改變。問題是,怎樣在設備的屏幕旋轉時及時獲取到改變后的寬高呢?

豎屏時我設置的視頻初始寬度為設備屏幕的寬度,高度為寬度的9/16,即按16:9的比例顯示。橫屏時視頻的寬度應為屏幕的寬度,高度應為當前屏幕的高度。由于橫屏時設備寬高發(fā)生了變化,及時獲取到寬高就能及時刷新UI,視頻就能全屏展示了。

剛開始我想到的辦法是使用 react-native-orientation 監(jiān)聽設備轉屏的事件,在回調(diào)方法中判斷當前是橫屏還是豎屏,這個在iOS上是可行的,但是在Android上橫屏和豎屏時獲取到寬高值總是不匹配的(比如,橫屏寬384高582,豎屏寬582高384,顯然不合理),這樣就無法做到統(tǒng)一處理。

所以,監(jiān)聽轉屏的方案是不行的,不僅費時還得不到想要的結果。更好的方案是在render函數(shù)中使用View作為最底層容器,給它設置一個"flex:1"的樣式,使其充滿屏幕,在View的onLayout方法中獲取它的寬高。無論屏幕怎么旋轉,onLayout都可以獲取到當前View的寬高和x、y坐標。

/// 屏幕旋轉時寬高會發(fā)生變化,可以在onLayout的方法中做處理,比監(jiān)聽屏幕旋轉更加及時獲取寬高變化
 _onLayout = (event) => {
 //獲取根View的寬高
 let {width, height} = event.nativeEvent.layout;
 console.log('通過onLayout得到的寬度:' + width);
 console.log('通過onLayout得到的高度:' + height);
 
 // 一般設備橫屏下都是寬大于高,這里可以用這個來判斷橫豎屏
 let isLandscape = (width > height);
 if (isLandscape){
  this.setState({
  videoWidth: width,
  videoHeight: height,
  isFullScreen: true,
  })
 } else {
  this.setState({
  videoWidth: width,
  videoHeight: width * 9/16,
  isFullScreen: false,
  })
 }
 };

這樣就實現(xiàn)了屏幕在旋轉時視頻也隨之改變大小,橫屏時全屏播放,豎屏回歸正常播放。注意,Android和iOS需要配置轉屏功能才能使界面自動旋轉,請自行查閱相關配置方法。

播放控制

上面實現(xiàn)了全屏播放還不夠,我們還需要一個工具欄來控制視頻的播放,比如顯示進度,播放暫停和全屏按鈕。具體思路如下:

  1. 使用一個View將Video組件包裹起來,View的寬高和Video一致,便于轉屏時改變大小
  2. 設置一個透明的遮罩層覆蓋在Video組件上,點擊遮罩層顯示或隱藏工具欄
  3. 工具欄中要顯示播放按鈕、進度條、全屏按鈕、當前播放時間、視頻總時長。工具欄以絕對位置布局,覆蓋在Video組件底部
  4. 使用react-native-orientation中的lockToPortrait和lockToLandscape方法強制旋轉屏幕,使用unlockAllOrientations在屏幕旋轉以后撤銷轉屏限制。

這樣才算是一個有模有樣的視頻播放器。下面是豎屏和橫屏的效果圖

再也不必為presentFullscreenPlayer方法不起作用而煩惱了,全屏播放實現(xiàn)起來其實很簡單。具體代碼請看demo: https://github.com/mrarronz/react-native-blog-examples/tree/master/Chapter7-VideoPlayer/VideoExample 。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 解決React報錯useNavigate()?may?be?used?only?in?context?of?Router

    解決React報錯useNavigate()?may?be?used?only?in?context?of

    這篇文章主要為大家介紹了解決React報錯useNavigate()?may?be?used?only?in?context?of?Router,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • React懶加載實現(xiàn)原理深入分析

    React懶加載實現(xiàn)原理深入分析

    懶加載意思是不會預加載,而是需要使用某段代碼,某個組件或者某張圖片時,才加載他們(延遲加載),這篇文章主要介紹了React懶加載實現(xiàn)原理
    2022-11-11
  • 使用useImperativeHandle時父組件第一次沒拿到子組件的問題

    使用useImperativeHandle時父組件第一次沒拿到子組件的問題

    這篇文章主要介紹了使用useImperativeHandle時父組件第一次沒拿到子組件的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解Immutable及 React 中實踐

    詳解Immutable及 React 中實踐

    Immutable 可以給 React 應用帶來數(shù)十倍的提升,也有人說 Immutable 的引入是近期 JavaScript 中偉大的發(fā)明,因為同期 React 太火,它的光芒被掩蓋了。這篇文章主要介紹了Immutable及 React 中的實踐,需要的朋友可以參考下
    2018-03-03
  • es6在react中的應用代碼解析

    es6在react中的應用代碼解析

    這篇文章主要介紹了es6在react中的應用代碼解析,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • React this.setState方法使用原理分析介紹

    React this.setState方法使用原理分析介紹

    我們知道,在React中沒有像Vue那種數(shù)據(jù)雙向綁定的效果。而this.setState方法就是用來對數(shù)據(jù)進行更改的。而通過this.setState方法更改的數(shù)據(jù),會讓組件的render重新渲染,并且刷新數(shù)據(jù)
    2022-09-09
  • React文字展開收起組件的實現(xiàn)示例

    React文字展開收起組件的實現(xiàn)示例

    本文主要介紹了React文字展開收起組件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • React路由攔截模式及withRouter示例詳解

    React路由攔截模式及withRouter示例詳解

    這篇文章主要為大家介紹了React路由攔截模式及withRouter示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • React實現(xiàn)輪播效果

    React實現(xiàn)輪播效果

    這篇文章主要為大家詳細介紹了React實現(xiàn)輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 歸納總結Remix?表單常用方法及示例詳解

    歸納總結Remix?表單常用方法及示例詳解

    這篇文章主要為大家歸納總結了Remix?表單常用方法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論