Android Presentation雙屏異顯開發(fā)流程詳細(xì)講解
1. 背景
我們那個(gè)副屏是一塊汽車的后視鏡(流媒體后視鏡),是一塊長條塊的屏幕,分辨率是400 * 1920 px,如何將需要顯示的內(nèi)容正確擺放地顯示到這塊屏幕上,也是我們開發(fā)中的一個(gè)重點(diǎn)。
并且,我們是使用平板橫屏進(jìn)行開發(fā)的,對于橫屏情況下雙屏異顯的處理,也是我們開發(fā)中的一個(gè)重點(diǎn)。
2. 創(chuàng)建主屏布局
主屏就用MainActivity就好
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//...
}
}
3. 創(chuàng)建副屏布局
這里,繼承了MyPresentation接口
class MyPresentation(outerContext: Context, display: Display) :
Presentation(outerContext, display) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.dialog_normal)//綁定副屏顯示的布局
}
//顯示時(shí)調(diào)用
override fun onStart() {
super.onStart()
}
//消失時(shí)調(diào)用
override fun onStop() {
super.onStop()
}
}
4. 將頁面投屏到副屏上
投屏到副屏上有多中方式,我們只需要在MainActivity中去調(diào)用這些代碼就可以了。
4.1 MediaRouter
MediaRouter mediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO);
if (route != null) {
Display presentationDisplay = route.getPresentationDisplay();
if (presentationDisplay != null) {
MyPresentation myPresentation = new MyPresentation(MainActivity.this, presentationDisplay);
myPresentation.show();
}
}
4.2 DisplayManager
DisplayManager mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = mDisplayManager.getDisplays();
if (displays.length > 1) {
//displays[0] 主屏,displays[1] 副屏
MyPresentation myPresentation = new MyPresentation(MainActivity.this, displays[1]);
myPresentation.show();
}
5. 橫屏狀態(tài)下雙屏異顯的處理
在我們那個(gè)副屏上,副屏的顯示邏輯是,主屏是豎屏,副屏就以副屏顯示,主屏是橫屏,副屏就以橫屏顯示。
如下圖所示

而我們想要達(dá)到的效果是,主屏是橫屏,而主屏是豎屏。
后來,我們想到了一個(gè)辦法,就是搞兩個(gè)Activity,Activity1負(fù)責(zé)顯示主屏的頁面,而Activity2負(fù)責(zé)副屏的顯示。
首先啟動(dòng)Activity2,然后迅速啟動(dòng)Activity1,當(dāng)Activity1關(guān)閉的時(shí)候,也去關(guān)閉Activity1,這樣就可以實(shí)現(xiàn)主屏和副屏方向顯示不一樣的情況了。
6. 將需要顯示的內(nèi)容正確擺放到副屏上
由于我們的副屏是一塊長條塊的屏幕,分辨率是400 * 1920 px,我們現(xiàn)在主屏上是橫屏顯示,而副屏通過上述的操作,顯示的是豎屏。

而我們真正期望顯示的內(nèi)容是藍(lán)色這部分

所以,我們需要對View做一下旋轉(zhuǎn)并位移
val rotation: ObjectAnimator =
ObjectAnimator.ofFloat(binding.textureView, "rotation", 0f, 90f)
val translationX: ObjectAnimator =
ObjectAnimator.ofFloat(binding.textureView, "translationX", 0f, -720F)
val translationY: ObjectAnimator =
ObjectAnimator.ofFloat(binding.textureView, "translationY", 0f, 420F)
val animatorSet = AnimatorSet()
animatorSet.playSequentially(rotation, translationX, translationY)
animatorSet.duration = 0
animatorSet.start()
最終顯示為這樣

7. 其他
沒有副屏的情況下,如何調(diào)試 ?
如果手頭上沒有副屏,可以在開發(fā)者選項(xiàng)中,打開模擬輔助顯示設(shè)備

這里我們可以選擇1080P

顯示出來的虛擬副屏如下所示

這樣,我們就可以通過虛擬的副屏進(jìn)行調(diào)試了。
參考
感謝
Android三種雙屏異顯實(shí)現(xiàn)方法介紹
Android Presentation實(shí)現(xiàn)雙屏異顯
到此這篇關(guān)于Android Presentation雙屏異顯開發(fā)流程詳細(xì)講解的文章就介紹到這了,更多相關(guān)Android Presentation內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kotlin基礎(chǔ)學(xué)習(xí)之位運(yùn)算
一提起位運(yùn)算,人們往往想到它的高效性,無論是嵌入式編程還是優(yōu)化系統(tǒng)的核心代碼,適當(dāng)?shù)倪\(yùn)用位運(yùn)算總是一種迷人的手段,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之位運(yùn)算的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-11-11
android 電話狀態(tài)監(jiān)聽(來電和去電)實(shí)現(xiàn)代碼
從事android開發(fā)的朋友們可能電話狀態(tài)監(jiān)聽不是很擅長,接下來將詳細(xì)介紹電話狀態(tài)監(jiān)聽功能的實(shí)現(xiàn)步驟,需要了解的朋友可以參考下2012-12-12
ERROR/AndroidRuntime(17121)的問題解決
ERROR/AndroidRuntime(17121)的問題解決,需要的朋友可以參考一下2013-05-05
Android ViewPager實(shí)現(xiàn)智能無限循環(huán)滾動(dòng)回繞效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)智能無限循環(huán)滾動(dòng)回繞效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android入門之實(shí)現(xiàn)自定義Adapter
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)自定義Adapter,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-11-11
Android超詳細(xì)講解組件AdapterView的使用
AdapterView組件是一組重要的組件,AdapterView本身是一個(gè)抽象基類,它派生的子類在用法上十分相似,從AdapterView派生出的三個(gè)子類:AdsListView、AdsSpinner、AdapterViewAnimator,這3個(gè)子類依然是抽象的,實(shí)際運(yùn)用時(shí)需要它們的子類2022-03-03
Android編程基礎(chǔ)之獲取手機(jī)屏幕大小(DisplayMetrics應(yīng)用)示例
這篇文章主要介紹了Android獲取手機(jī)屏幕大小的方法,結(jié)合實(shí)例形式分析了TextView ,Button ,以及DisplayMetrics的使用方法,并重點(diǎn)分析了DisplayMetrics的應(yīng)用技巧,需要的朋友可以參考下2016-10-10
Android開發(fā)之開發(fā)者頭條(一)啟動(dòng)頁實(shí)現(xiàn)
這篇文章主要介紹了Android開發(fā)之開發(fā)者頭條(一)啟動(dòng)頁實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-04-04

