編輯:關於Android編程
在設備旋轉成橫屏的時候,視頻將自動進行全屏播放。
我們要為全屏播放界面設置一個新的布局,這個布局裡面只用來播放視頻,不需要顯示任何視頻信息,
<framelayout android:background="@color/video_background_color" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android">
</framelayout>
因為橫豎屏的VideoPlayer
都是一套代碼實現的,所以需要判斷當前Activity是橫屏還是豎屏,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
//界面橫屏時需要進行的操作
}
......
}
在VideoPlayer
創建的時候,我們要對這個Activity進行全屏的設置,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
}
......
}
因為要使應用全屏,所以需要修改Activity所屬的窗口-Window的屬性。以此告訴系統需要隱藏狀態欄和導航欄。
還需要隱藏ActionBar
。
在旋轉的過程中,Activity將經歷這些的生命周期:
用戶可以與Activity交互,此時屏幕進行旋轉,從豎屏變橫屏->
onSaveInstanceState()
->
onPause()
->
onStop()
->
onDestroy()
->
onCreate()
->
onStart()
->
onRestoreInstanceState()
->
onResume()
->
用戶可以與Activity交互;
可見,這個Activity要被重新創建一次,所以當視頻正在播放的時候,我們要保存好視頻當前播放的位置,Activity重建以後才能從之前播放到的位置繼續播放。
我們要在onSaveInstanceState()
裡面保存當前播放的位置,
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(LAST_PLAYED_TIME, mVideoView.getCurrentPosition());
}
在onRestoreInstanceState()
裡面取出打斷播放時的位置,並存儲到mLastPlayedTime
裡面,當Activity在onResume()
的時候,就能夠跳轉到播放點開始播放了。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mLastPlayedTime = savedInstanceState.getInt(LAST_PLAYED_TIME);
}
安卓系統的開發性不只是源碼的開放,各個應用之間也是可以互相利用的。比如,我們在圖片浏覽器裡面浏覽照片,發現好的,可以通過分享按鈕,通過另外一個應用-“微信”,把照片分享到“朋友圈”。這裡的“微信”,就是可以被別的應用利用的工具。
類似的,我們也可以把這個視頻播放器,做成這種可以被別的程序使用的工具。例如當用戶使用文件浏覽器浏覽磁盤上的文件時,發現一個視頻文件,點擊後,系統可以提示用戶用我們的播放器來播放。
要實現這樣的修改非常的容易,只需要修改AndroidManifest.xml
中注冊的播放器Activity屬性,
VideoPlayer
的過濾器添加action
標簽,值設置為android.intent.action.View
; 為VideoPlayer
的過濾器添加data
標簽,讓VideoPlayer
關注video
類型的數據;
......
......
......
這樣,如果別的任何應用使用android.intent.action.View
來試圖打開一個視頻文件,我們的VideoPlayer
就能滿足這樣的要求,就會被系統作為推薦打開方式,提供給用戶選擇。
一個簡單但是功能比較完備的視頻播放器已經開發完成了。
最後,可以在菜單欄中增加一個“關於”功能,通過它啟動一個介紹這個應用的說明Activity。我們在這裡就簡單的展示下開發者信息和應用版本信息。
通過這一章節的學習,我們對安卓系統又有了進一步的認識,應該具備了開發一個簡單安卓應用的能力。
安卓開發之路一步一步走到現在,我們開始漸入佳境。有了這前面兩個篇章的鋪墊,相信大家已經算是對安卓開發入門了。
對於本章開篇中提到的那些“遺憾”之處,也許就是我們下一個篇章深入開發的起點。
前言在H5火熱的時代,許多框架都出了底部彈窗的控件,在H5被稱為彈出菜單ActionSheet,今天我們也來模仿一個ios的底部彈窗,取材於蘋果QQ的選擇頭像功能。正文廢
上一篇《深入理解ART虛擬機—虛擬機的啟動》分析了art虛擬機的啟動過程,不過跳過了一個技術點,就是ImageSpace。由之前的分析可知,ClassLink
如下圖。在Android上實現起來就不太容易,有些效果還是不如web端酷炫。)我們的Demo,Ac娘鎮樓(圖很渣,也忽略底下的SeekBar,這不是重點)一些動畫,效果錄
相信大家對AsyncTask機制都不陌生?基本的使用的方法和注意事項都清楚,編寫一個類,繼承AsyncTask類,必須重寫doInBackground()方法,運行在子線