1. 背景
最近開發(fā)的一個項目,有兩個屏幕,需要將第二個頁面投屏到副屏上,
這就需要用到Android
的雙屏異顯(Presentation
)技術(shù)了,研究了一下,這里做下筆記。
我們那個副屏是一塊汽車的后視鏡(流媒體后視鏡
),是一塊長條塊的屏幕,分辨率是400 * 1920 px
。
如何將需要顯示的內(nèi)容正確擺放地顯示到這塊屏幕上,是我們開發(fā)中的一個重點(diǎn)。
并且,我們是使用平板橫屏進(jìn)行開發(fā)的,對于橫屏情況下雙屏異顯的處理,也是我們開發(fā)中的一個重點(diǎn)。
我們先來了解一下雙屏異顯(
Presentation
)技術(shù)是什么 ?
Android Presentation是Android系統(tǒng)中的一個顯示設(shè)備,
它可以在同一時間連接多個顯示設(shè)備,并且可以在不同的顯示設(shè)備上顯示不同的內(nèi)容。
它可以通過HDMI或VGA等接口連接外部顯示器, 從而擴(kuò)展或切換屏幕。
使用Presentation,可以在不同的屏幕上顯示不同的內(nèi)容, 例如在投影儀上顯示演示文稿,同時在筆記本上顯示備注。
這可以更好地展示信息,提高演示效果。
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)//綁定副屏顯示的布局
}
//顯示時調(diào)用
override fun onStart() {
super.onStart()
}
//消失時調(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)下雙屏異顯的處理
在我們那個副屏上,副屏的顯示邏輯是,主屏是豎屏,副屏就以副屏顯示,主屏是橫屏,副屏就以橫屏顯示。
如下圖所示
而我們想要達(dá)到的效果是,主屏是橫屏,而主屏是豎屏。
后來,我們想到了一個辦法,就是搞兩個Activity
,Activity1
負(fù)責(zé)顯示主屏的頁面,而Activity2
負(fù)責(zé)副屏的顯示。
首先啟動Activity2
,然后迅速啟動Activity1
,當(dāng)Activity1
關(guān)閉的時候,也去關(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. 其他
7.1 沒有副屏的情況下,如何調(diào)試 ?
如果手頭上沒有副屏,可以在開發(fā)者選項中,打開模擬輔助顯示設(shè)備
這里我們可以選擇1080P
、720P
、4K
等都是可以的
選擇后,顯示出來的虛擬副屏如下所示
這樣,我們在沒有真實(shí)的副屏的情況下,就可以通過虛擬的副屏進(jìn)行調(diào)試了。
7.2 雙屏異顯的應(yīng)用場景
Android Presentation 可以用于以下場景:
- 酒店登記信息:酒店員工可以通過一個屏幕進(jìn)行操作,而顧客則可以通過另一個屏幕查看相關(guān)信息。
- 醫(yī)療設(shè)備:一些醫(yī)療設(shè)備可能需要同時連接多個屏幕,以便醫(yī)生能夠同時查看多個病人的信息。
- 演示文稿:演示者可以在一個屏幕上播放演示文稿,同時在另一個屏幕上顯示備注或相關(guān)數(shù)據(jù)。
- 多屏協(xié)同:多個屏幕可以連接在一起,每個屏幕上可以顯示不同的內(nèi)容,提高多任務(wù)處理效率。
所以說Android的雙屏異顯在特定領(lǐng)域還是很有用的。
7.3 本文源碼下載
本文Demo下載地址 : Android 雙屏異顯(Presentation) 開發(fā)示例Demo文章來源:http://www.zghlxwxcb.cn/news/detail-784054.html
7.4 參考
感謝
Android 雙屏異顯實(shí)現(xiàn)的三種方式
Android Presentation實(shí)現(xiàn)雙屏異顯
Presentation 官方文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-784054.html
到了這里,關(guān)于Android 雙屏異顯(Presentation) 開發(fā),將第二個頁面投屏到副屏上的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!