Android는 Fragment에서 SurfaceView를 사용하여 전환할 때 검은 화면을 깜빡이는 문제를 해결합니다

이전에 자신의 뉴스 클라이언트를 재구성했고 모두 Fragment를 사용하여 페이지 전환을 했다. 단지 하나의 입구인 Activity만 프로그램의 시작인 Activity로 했다. 그 중 하나는 카메라가 QR코드를 식별해야 하기 때문에 SurfaceView로 예람을 한다. 그러면 문제가 생겼다. 대응하는 Fragment로 전환할 때 화면이 어두워진다.1초 정도 어두워지면 정상적인 인터페이스가 보이고 이런 현상은 이 Fragment에 처음 들어와야 나타나고 그 다음에 들어와도 나타나지 않는다. 해결 방법은github에서 무심코 본 것이다. 시도해 봤는데 실행할 수 있고 아래에 해결 방법을 붙인다.
방법 1. Activity의 onCreate에 다음 코드를 추가합니다
getWindow().setFormat(PixelFormat.TRANSLUCENT); 

근데 프랭크에서 이러면 안 될 것 같아서요.
방법 2. activity의 루트 뷰에 길이와 너비가 0px이고 SurfaceView 요소를 볼 수 없습니다.
이유:
SurfaceView는 일반적인view와 다르기 때문에, 자체적으로 좋은 버퍼와 데이터 접근 메커니즘을 가지고 있으며, 시스템은 그에 대해 특별한 처리를 한다.surfaceview가 현재activity에 처음 추가되었을 때, 시스템은 윈도우 관리자에게 레이아웃을 다시 설정합니다.relayout. 그러면 검은색이 됩니다. 이것은 첫 번째에만 나타나고, 이후에surfaceview를 추가할 때 검은색이 되지 않습니다.
자신의 프로젝트에서fragment를 사용하여 페이지를 전환하기 때문에 목록 파일에 하나의activity 성명만 있지만 코드에는fragment 용기로 activity를 새로 열지 여부를 설정할 수 있습니다. 이 activity에 코드 getWindow () 를 추가하고 싶지 않기 때문입니다.setFormat(PixelFormat.TRANSLUCENT);,그래서 나는 이fragment의 용기로 새로운activity를 사용했고 문제도 해결되었다.
플래시 코드가 이렇게 있어요.
private static final int REQUEST_CODE_SCAN = 1;
openPageForResult("scan",null,CoreAnim.slide,REQUEST_CODE_SCAN);

그러나 이 함수에는 재부팅 함수가 하나 있는데, 새로 액티브를 열었는지 여부입니다. 여기서 재부팅 함수를 사용하여 해결합니다
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);

페이지 전환의 구체적인 프레임워크는 다음과 같다https://github.com/lizhangqu/CorePage

좋은 웹페이지 즐겨찾기