Android Fragment中使用SurfaceView切換時閃一下黑屏的解決辦法_Android

來源:互聯網
上載者:User

重構了下之前自己的一個新聞用戶端,全部使用了Fragment來進行頁面切換,只有一個入口Activity作為程式的啟動Activity,其中有一個介面需要調用網路攝影機識別二維碼,於是就會用到SurfaceView進行預覽,那麼問題來了,當切換到對應的Fragment時,螢幕會黑一下,黑了1秒左右就顯示出正常的介面,而且這種現象只有第一次進入該Fragment才會出現,之後進入都不會出現,解決方案是無意在github上看到了,試了一下,可以行的通,下面貼出解決方案。

方法一、在Activity的onCreate中添加如下代碼

複製代碼 代碼如下:

getWindow().setFormat(PixelFormat.TRANSLUCENT); 

但是如果你在fragment裡這麼做貌似是行不通的。

方法二、在activity 的 root view 裡面 加入一個 長寬都是0px的並且不可見SurfaceView元素 。

原因:

SurfaceView因為不同於一般的view,它有自己良好的緩衝以及資料存取機制,系統對他有特殊處理。當surfaceview第一次在當前activity上添加的時候,系統會給WindowManager重新排布局,relayout,這樣就會黑一下,這個只會出現在第一次,以後再添加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);

但是這個函數有一個重載函數就是是否新開activity,這裡使用重載函數進行解決

private static final int REQUEST_CODE_SCAN = 1;openPageForResult(true,"scan",null,CoreAnim.slide,REQUEST_CODE_SCAN);

函數原型

 /**   * 開啟fragment並請求獲得傳回值,並設定是否在新activity中開啟   * @param newActivity 是否新開activity   * @param pageName 頁面名   * @param bundle 參數   * @param coreAnim 動畫   * @param requestCode 請求碼   * @return 開啟的fragment對象   */  public final Fragment openPageForResult(boolean newActivity, String pageName, Bundle bundle, CoreAnim coreAnim, int requestCode);

以上內容就是本文給大家分享的Android Fragment中使用SurfaceView切換時閃一下黑屏的解決辦法,希望對大家有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.