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

Android 畫中畫模式的實(shí)現(xiàn)示例

 更新時(shí)間:2020年12月15日 10:22:26   作者:超級(jí)瞎比小張  
這篇文章主要介紹了Android 畫中畫模式的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

畫中畫支持

Android 8.0(API 級(jí)別 26)允許以畫中畫模式啟動(dòng) Activity。畫中畫是一種特殊類型的多窗口模式,最常用于視頻播放。使用該模式,用戶可以通過(guò)固定到屏幕一角的小窗口觀看視頻,同時(shí)在應(yīng)用之間進(jìn)行導(dǎo)航或?yàn)g覽主屏幕上的內(nèi)容。

畫中畫利用 Android 7.0 中的多窗口模式 API 來(lái)提供固定的視頻疊加窗口。要將畫中畫添加到您的應(yīng)用中,您需要注冊(cè)支持畫中畫的 Activity、根據(jù)需要將 Activity 切換為畫中畫模式,并確保當(dāng) Activity 處于畫中畫模式時(shí),界面元素處于隱藏狀態(tài)且視頻能夠繼續(xù)播放。

畫中畫窗口會(huì)顯示在屏幕的最上層,位于系統(tǒng)選擇的一角。您可以將畫中畫窗口拖動(dòng)到其他位置。當(dāng)您點(diǎn)按該窗口時(shí),會(huì)看到兩個(gè)特殊的控件:全屏切換開(kāi)關(guān)(位于窗口的中心)和關(guān)閉按鈕(右上角的“X”)。

您的應(yīng)用會(huì)控制當(dāng)前 Activity 在何時(shí)進(jìn)入畫中畫模式。以下是一些示例:

  • Activity 可以在用戶點(diǎn)按主屏幕或最近使用的應(yīng)用按鈕來(lái)選擇其他應(yīng)用時(shí),進(jìn)入畫中畫模式。(這就是 Google 地圖在用戶同時(shí)運(yùn)行其他 Activity 時(shí)繼續(xù)顯示方向的方式。)
  • 您的應(yīng)用可以在用戶從某個(gè)視頻返回以瀏覽其他內(nèi)容時(shí),將該視頻切換到畫中畫模式。
  • 您的應(yīng)用可以在用戶觀看到某集內(nèi)容的結(jié)束時(shí)將視頻切換到畫中畫模式。主屏幕會(huì)顯示有關(guān)這部電視劇下一集的宣傳信息或劇情摘要信息。
  • 您的應(yīng)用可以提供一種方式,讓用戶可以在觀看視頻時(shí)將其他內(nèi)容加入播放隊(duì)列。當(dāng)主屏幕顯示內(nèi)容選擇 Activity 時(shí),視頻會(huì)繼續(xù)以畫中畫模式播放。

聲明對(duì)畫中畫的支持

默認(rèn)情況下,系統(tǒng)不會(huì)自動(dòng)為應(yīng)用提供畫中畫支持。要想在應(yīng)用中支持畫中畫,您可以通過(guò)將 android:supportsPictureInPicture 和 android:resizeableActivity 設(shè)置為 true,在清單中注冊(cè)視頻 Activity。此外,指定您的 Activity 會(huì)處理布局配置更改,這樣一來(lái),在畫中畫模式轉(zhuǎn)換期間發(fā)生布局更改時(shí),您的 Activity 不會(huì)重新啟動(dòng)。

  <activity android:name="VideoActivity"
    android:resizeableActivity="true"
    android:supportsPictureInPicture="true"
    android:configChanges=
      "screenSize|smallestScreenSize|screenLayout|orientation"
    ...

將您的 Activity 切換到畫中畫模式

要進(jìn)入畫中畫模式,Activity 必須調(diào)用 enterPictureInPictureMode()。例如,以下代碼會(huì)在用戶點(diǎn)擊應(yīng)用界面中的專用按鈕時(shí),將 Activity 切換到畫中畫模式:

  @Override
  public void onActionClicked(Action action) {
    if (action.getId() == R.id.lb_control_picture_in_picture) {
      getActivity().enterPictureInPictureMode();
      return;
    }
    ...
  }

您可能需要添加將 Activity 切換到畫中畫模式(而不是進(jìn)入后臺(tái))的邏輯。例如,如果用戶在 Google 地圖正在導(dǎo)航時(shí)按下主屏幕或最近使用的應(yīng)用按鈕,則該應(yīng)用會(huì)切換到畫中畫模式。您可以通過(guò)替換 onUserLeaveHint() 來(lái)具體了解這種情況:

  @Override
  public void onUserLeaveHint () {
    if (iWantToBeInPipModeNow()) {
      enterPictureInPictureMode();
    }
  }

在畫中畫期間處理界面

當(dāng) Activity 進(jìn)入或退出畫中畫模式時(shí),系統(tǒng)會(huì)調(diào)用 Activity.onPictureInPictureModeChanged() 或 Fragment.onPictureInPictureModeChanged()。

您應(yīng)替換這些回調(diào)以重新繪制 Activity 的界面元素。請(qǐng)注意,在畫中畫模式下,您的 Activity 會(huì)在一個(gè)小窗口中顯示。在畫中畫模式下,用戶可能看不清小界面元素的詳細(xì)信息,因此不會(huì)與這些界面元素互動(dòng)。界面極簡(jiǎn)的視頻播放 Activity 可提供出色的用戶體驗(yàn)。Activity 應(yīng)僅顯示視頻播放控件。在 Activity 進(jìn)入畫中畫模式之前移除其他界面元素,并在 Activity 再次變?yōu)槿習(xí)r恢復(fù)這些元素:

  @Override
  public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) {
    if (isInPictureInPictureMode) {
      // Hide the full-screen UI (controls, etc.) while in picture-in-picture mode.
    } else {
      // Restore the full-screen UI.
      ...
    }
  }

添加控件

畫中畫窗口會(huì)在用戶打開(kāi)窗口菜單(通過(guò)點(diǎn)按移動(dòng)設(shè)備上的窗口或使用電視遙控器選擇菜單)時(shí)顯示控件。

如果應(yīng)用有一個(gè)活躍的媒體會(huì)話,則窗口會(huì)顯示播放、暫停、下一個(gè)和上一個(gè)控件。

您還可以通過(guò)在進(jìn)入畫中畫模式之前構(gòu)建 PictureInPictureParams(使用 PictureInPictureParams.Builder.setActions())來(lái)明確指定自定義操作,并使用 enterPictureInPictureMode(android.app.PictureInPictureParams) 或 setPictureInPictureParams(android.app.PictureInPictureParams) 在進(jìn)入畫中畫模式時(shí)傳遞這些參數(shù)。請(qǐng)注意,如果您嘗試添加的控件數(shù)量超過(guò) getMaxNumPictureInPictureActions(),則系統(tǒng)只會(huì)添加上限數(shù)量的控件。

在畫中畫模式下繼續(xù)播放視頻

當(dāng)您的 Activity 切換到畫中畫模式時(shí),系統(tǒng)會(huì)將該 Activity 置于暫停狀態(tài)并調(diào)用 Activity 的 onPause() 方法。如果該 Activity 在畫中畫模式下暫停,則視頻播放不得暫停,而應(yīng)繼續(xù)播放。

在 Android 7.0 及更高版本中,當(dāng)系統(tǒng)調(diào)用 Activity 的 onStop() 時(shí),您應(yīng)暫停視頻播放;當(dāng)系統(tǒng)調(diào)用 Activity 的 onStart() 時(shí),您應(yīng)恢復(fù)視頻播放。這樣一來(lái),您就無(wú)需在 onPause() 中檢查應(yīng)用是否處于畫中畫模式,只需繼續(xù)播放視頻即可。

如果您必須在 onPause() 實(shí)現(xiàn)中暫停播放,請(qǐng)通過(guò)調(diào)用 isInPictureInPictureMode() 檢查畫中畫模式并相應(yīng)地處理播放情況,例如:

  @Override
  public void onPause() {
    // If called while in PIP mode, do not pause playback
    if (isInPictureInPictureMode()) {
      // Continue playback
      ...
    } else {
      // Use existing playback logic for paused Activity behavior.
      ...
    }
  }

當(dāng)您的 Activity 從畫中畫模式切換回全屏模式時(shí),系統(tǒng)會(huì)恢復(fù)您的 Activity 并調(diào)用 onResume() 方法。

對(duì)單個(gè)播放 Activity 使用畫中畫模式

在您的應(yīng)用中,用戶可能會(huì)在主屏幕上瀏覽內(nèi)容時(shí)選擇新的視頻,同時(shí)還有一個(gè)視頻播放 Activity 正處于畫中畫模式。應(yīng)以全屏模式在現(xiàn)有的播放 Activity 中播放新的視頻,而不是啟動(dòng)可能會(huì)令用戶感到困惑的新 Activity。

要確保將單個(gè) Activity 用于視頻播放請(qǐng)求并根據(jù)需要進(jìn)入或退出畫中畫模式,請(qǐng)?jiān)谇鍐沃袑?Activity 的 android:launchMode 設(shè)置為 singleTask:

  <activity android:name="VideoActivity"
    ...
    android:supportsPictureInPicture="true"
    android:launchMode="singleTask"
    ...

在您的 Activity 中,替換 onNewIntent() 并處理新的視頻,從而根據(jù)需要停止任何現(xiàn)有的視頻播放。

最佳做法

低內(nèi)存設(shè)備可能無(wú)法使用畫中畫模式。在應(yīng)用使用畫中畫之前,請(qǐng)務(wù)必通過(guò)調(diào)用 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) 進(jìn)行檢查以確??梢允褂卯嬛挟嫛?/p>

畫中畫旨在用于播放全屏視頻的 Activity。將 Activity 切換到畫中畫模式時(shí),請(qǐng)避免顯示視頻內(nèi)容以外的任何內(nèi)容。跟蹤您的 Activity 何時(shí)進(jìn)入畫中畫模式及隱藏界面元素,如在畫中畫期間處理界面中所述。

由于畫中畫窗口在屏幕的一角顯示為浮動(dòng)窗口,因此您應(yīng)避免在主屏幕中可能被畫中畫窗口遮蓋的任何區(qū)域內(nèi)顯示重要信息。

當(dāng) Activity 進(jìn)入畫中畫模式后,它默認(rèn)沒(méi)有獲得輸入焦點(diǎn)。要在畫中畫模式下接收輸入事件,請(qǐng)使用 MediaSession.setCallback()。如需詳細(xì)了解如何使用 setCallback(),請(qǐng)參閱顯示“正在播放”卡片。

當(dāng)您的應(yīng)用處于畫中畫模式時(shí),畫中畫窗口中的視頻播放可能會(huì)對(duì)其他應(yīng)用(例如,音樂(lè)播放器應(yīng)用或語(yǔ)音搜索應(yīng)用)造成音頻干擾。為避免出現(xiàn)此問(wèn)題,請(qǐng)?jiān)陂_(kāi)始播放視頻時(shí)請(qǐng)求音頻焦點(diǎn),并處理音頻焦點(diǎn)更改通知,如管理音頻焦點(diǎn)中所述。如果您在處于畫中畫模式時(shí)收到音頻焦點(diǎn)丟失通知,請(qǐng)暫?;蛲V挂曨l播放。

到此這篇關(guān)于Android 畫中畫模式的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Android 畫中畫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android UI設(shè)計(jì)與開(kāi)發(fā)之PopupWindow仿騰訊新聞底部彈出菜單

    Android UI設(shè)計(jì)與開(kāi)發(fā)之PopupWindow仿騰訊新聞底部彈出菜單

    這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開(kāi)發(fā)之PopupWindow仿騰訊新聞底部彈出菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Retrofit 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求接口實(shí)例過(guò)程

    Retrofit 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求接口實(shí)例過(guò)程

    這篇文章主要為大家介紹了Retrofit 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求接口實(shí)例過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android中解決WebView上下滑動(dòng)監(jiān)聽(tīng)問(wèn)題

    Android中解決WebView上下滑動(dòng)監(jiān)聽(tīng)問(wèn)題

    本篇文章主要介紹了Android中解決WebView滑動(dòng)監(jiān)聽(tīng)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Android string.xml中的替換方法

    Android string.xml中的替換方法

    這篇文章主要介紹了Android string.xml中的替換方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了string.xml中變量替換的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android連接服務(wù)器端的Socket的實(shí)例代碼

    Android連接服務(wù)器端的Socket的實(shí)例代碼

    這篇文章主要介紹了Android連接服務(wù)器端的Socket的實(shí)例代碼,需要的朋友可以參考下
    2017-05-05
  • android通用xml解析方法

    android通用xml解析方法

    之前做的網(wǎng)絡(luò)相關(guān)的應(yīng)用,里面涉及到了xml的解析,由于急于完成任務(wù)也沒(méi)有設(shè)計(jì)就直接敲代碼。這幾天給一個(gè)朋友做項(xiàng)目的時(shí)候也涉及到了xml的解析,而且解析的內(nèi)容比較多,我查看了以前的項(xiàng)目中的相關(guān)代碼,頓時(shí)覺(jué)得很多代碼都是可以優(yōu)化的。在此寫兩個(gè)通用的xml解析方法,當(dāng)然這里所講的通用只是在一定程度上并且需要遵守一些規(guī)范。
    2013-03-03
  • Android使用TouchDelegate增加View的觸摸范圍

    Android使用TouchDelegate增加View的觸摸范圍

    這篇文章主要為大家詳細(xì)介紹了Android使用TouchDelegate增加View的觸摸范圍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android控件RadioButton實(shí)現(xiàn)多選一功能

    Android控件RadioButton實(shí)現(xiàn)多選一功能

    這篇文章主要為大家詳細(xì)介紹了Android控件RadioButton實(shí)現(xiàn)多選一功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android ButtonOnClick事件的寫法總結(jié)

    Android ButtonOnClick事件的寫法總結(jié)

    這篇文章主要介紹了Android ButtonOnClick事件的寫法總結(jié)的相關(guān)資料,這里把Android ButtonOnClick的寫法做個(gè)總結(jié),希望能幫助到大家,需要的朋友可以參考下
    2017-07-07
  • Android編程實(shí)現(xiàn)監(jiān)控apk安裝,卸載,替換的方法

    Android編程實(shí)現(xiàn)監(jiān)控apk安裝,卸載,替換的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)監(jiān)控apk安裝,卸載,替換的方法,涉及Android基于Intent監(jiān)控apk狀態(tài)的功能實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-01-01

最新評(píng)論