Android Fragment中使用SurfaceView切換時閃一下黑屏的解決辦法
重構(gòu)了下之前自己的一個新聞客戶端,全部使用了Fragment來進行頁面切換,只有一個入口Activity作為程序的啟動Activity,其中有一個界面需要調(diào)用攝像頭識別二維碼,于是就會用到SurfaceView進行預(yù)覽,那么問題來了,當切換到對應(yīng)的Fragment時,屏幕會黑一下,黑了1秒左右就顯示出正常的界面,而且這種現(xiàn)象只有第一次進入該Fragment才會出現(xiàn),之后進入都不會出現(xiàn),解決方法是無意在github上看到了,試了一下,可以行的通,下面貼出解決方法。
方法一、在Activity的onCreate中添加如下代碼
getWindow().setFormat(PixelFormat.TRANSLUCENT);
但是如果你在fragment里這么做貌似是行不通的。
方法二、在activity 的 root view 里面 加入一個 長寬都是0px的并且不可見SurfaceView元素 。
原因:
SurfaceView因為不同于一般的view,它有自己良好的緩沖以及數(shù)據(jù)存取機制,系統(tǒng)對他有特殊處理。當surfaceview第一次在當前activity上添加的時候,系統(tǒng)會給WindowManager重新排布局,relayout,這樣就會黑一下,這個只會出現(xiàn)在第一次,以后再添加surfaceview時就不會黑屏了。
而自己項目中,由于全部使用fragment進行切換頁面,只有一個activity聲明在清單文件中,但是代碼中是可以配置是否新開activity作為fragment容器的,由于我不想再這個activity中增加代碼getWindow().setFormat(PixelFormat.TRANSLUCENT);,于是我使用了新開activity作為這個fragment的容器,于是問題也得以解決。
有閃屏的代碼是這樣的
private static final int REQUEST_CODE_SCAN = 1;
openPageForResult("scan",null,CoreAnim.slide,REQUEST_CODE_SCAN);
但是這個函數(shù)有一個重載函數(shù)就是是否新開activity,這里使用重載函數(shù)進行解決
private static final int REQUEST_CODE_SCAN = 1; openPageForResult(true,"scan",null,CoreAnim.slide,REQUEST_CODE_SCAN);
函數(shù)原型
/** * 打開fragment并請求獲得返回值,并設(shè)置是否在新activity中打開 * @param newActivity 是否新開activity * @param pageName 頁面名 * @param bundle 參數(shù) * @param coreAnim 動畫 * @param requestCode 請求碼 * @return 打開的fragment對象 */ public final Fragment openPageForResult(boolean newActivity, String pageName, Bundle bundle, CoreAnim coreAnim, int requestCode);
以上內(nèi)容就是本文給大家分享的Android Fragment中使用SurfaceView切換時閃一下黑屏的解決辦法,希望對大家有所幫助。
相關(guān)文章
Android 定位系統(tǒng)(GPS)開發(fā)詳解
GPS定位是智能手機上一個比較有意思的功能,LBS等服務(wù)都有效的利用了GPS定位功能,本文就跟大家分享下Android開發(fā)中的GPS定位知識2016-07-07
Android Broadcast原理分析之registerReceiver詳解
這篇文章主要介紹了Android Broadcast原理分析之registerReceiver詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
Android進階CoordinatorLayout協(xié)調(diào)者布局實現(xiàn)吸頂效果
這篇文章主要為大家介紹了Android進階CoordinatorLayout協(xié)調(diào)者布局實現(xiàn)吸頂效果,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Android自定義View實現(xiàn)開關(guān)按鈕
android 自定義view知識非常廣泛,難以讓人掌握。但是也是andoroid進階學(xué)習(xí)的必經(jīng)之路。下面通過本文給大家介紹Android自定義View實現(xiàn)開關(guān)按鈕的知識,非常不錯,感興趣的朋友一起看看吧2016-11-11
Android WebView如何判定網(wǎng)頁加載的錯誤
這篇文章主要介紹了Android WebView如何判定網(wǎng)頁加載的錯誤,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04

