Android開發之使用VideoView實現視頻的橫屏播放、去除邊框,androidvideoview
做項目需要播放一個引導視頻,本以為很簡單,結果動手時發現總有瑕疵,幸好有度娘,現把收穫總結如下:
一、實現視頻播放:
註明我這裡要播放的是Android項目中的資源檔,而不是訪問SD卡播放視頻。
1.先把要播放的視頻放到res/raw目錄下
2.視頻格式必須是Android支援的格式(3gp,mp4,wmv),據說swf不支援,暫未試過。並且視頻檔案命名不能有大寫字母,必須是小寫字母、數字或底線。
3.布局檔案中添加VideoView組件
4.建立個String類型對象儲存uri
5.調用VideoView的setVideoURI方法設定URI,參數為上面的uri
6.調用start()方法播放。
代碼如下:
布局檔案中添加:
<VideoView android:id="@+id/video" android:layout_width="match_parent" android:layout_height="match_parent" />
Activity中設定:
private void playVideo() {video = (VideoView) findViewById(R.id.video);String uri = "android.resource://" + getPackageName() + "/" + R.raw.guide;video.setVideoURI(Uri.parse(uri));video.start();}
以上代碼實現了視頻的播放,但視頻並沒有按我們想的橫屏、全屏播放,所以需要第二步:
二、視頻全屏播放(去除底部出現的邊框):
想要對VideoView進行參數配置,就需要用到setLayoutParams方法。但是查看API我們可以看到VideoView並沒有這個方法,怎麼辦呢?
我們需要在布局檔案中的VideoView組件外包裹一個布局,我這裡用的是RelativeLayout,,其他的應該也可以:
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <VideoView android:id="@+id/video" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
添加後,就可以進行參數配置:
String uri = "android.resource://" + getPackageName() + "/" + R.raw.guide;video.setVideoURI(Uri.parse(uri));RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT);layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);video.setLayoutParams(layoutParams);video.start();
那四個addRule方法將邊框都消除,LayoutParams構造方法實現全屏。
完成上一步後運行,發現雖然視頻可以全屏,但顯示完全失真,不是我們想要的效果,如果手機開啟了自動轉屏,我們會發現將手機轉到橫屏後視頻的播放效果才是我們想要的。如何讓視頻在播放時就自動轉到橫屏播放呢?
三、設定視頻橫屏播放:
每個Activity是否允許轉屏,當前顯示方式是橫屏還是豎屏,都可以通過在AndroidManifest.xml檔案中設定:
比如我當前播放視頻時在Splash這個activity中播放,就可以在她的標籤中添加screenOrientation屬性控制螢幕方向(landscape是橫向,portrait是縱向):
<activity android:name="com.zsx.activity.Splash" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:screenOrientation="landscape"> </activity>
有些時候我們希望某些頁面只有豎屏或者橫屏,擔心轉屏後布局會變難看,就可以在響應的activity中設定這個屬性,使用者怎麼轉屏都不會再變了!哈哈