19

세로 모드로 재생되는 비디오가 있습니다. 비디오가 끝나면 몇 가지 뷰를 표시해야합니다. 지금까지 잘 작동합니다.Android - 전체 화면 비디오의 마지막 프레임에 겹쳐서 표시된보기가 화면을 켜고 끌 때 제대로 다시 그려지지 않습니다.

그러나 화면의 전원을 껐다가 다시 켜고 화면을 잠금 해제 한 후 다시 돌아올 때 비디오의 마지막 프레임을 넘은보기가 제대로 다시 그려지지 않는 문제가 있습니다.

내가 관찰 한 것은 화면이 다시 열리고 잠금 해제 될 때입니다. 내 비디오 및 이미지는 먼저 전체 화면 모드에서 렌더링되고 (상태 표시 줄은 계속 표시됨) 화면이 전체 화면 모드로 전환되어 모든보기가 위로 이동하고 아티팩트가 발생합니다.

렌더링 된 후 뷰가 전체 화면으로 전환되어 뷰 경계 밖으로 이동 된 것처럼 보입니다.

나는 이런 일이 일어나지 않도록 어떻게해야하는지에 관해 정말로 혼란 스럽다.

Here is the sandbox project on github 코드의 전체 게시물을 피하십시오.

프로젝트에 대한 기본 설정은 이것이다 :

조각 활동은 비디오 뷰를 가지고 있으며, 그것에 단추보기 레이아웃입니다. 그런 다음 fragment를 contentView 컨테이너에 추가합니다. contentView는 비디오 재생이 끝나기 1 초 전에 사라집니다.

모든 것이 원활하게 작동하며 화면의 전원을 켜고 끈 후에 앱으로 돌아 오는 데 문제가 있습니다.

또한 비디오가 완전히 드롭되어 검은 배경 위에 뷰가 놓여지는 경우가 있습니다.

제공 할 수있는 도움에 미리 감사드립니다.

proper rendering of views over video

다음은 다시 화면을 끄고 잠금을 해제 할 때 일어나는 아티팩트입니다. 사진을 찍어야한다는 것에 유의하십시오. DDMS에서 스크린 샷 도구는 이미지를 올바르게 봅니다. 오버레이 레이아웃 컨트롤러 막대로 이동 것처럼

artifacted image

답변

3

화면을 끄는 대신 사용자가 휴대 전화를 깨운 후 사용자가 키 가드를 잠금 해제 할 때 이벤트를 수신하도록 선택할 수 있습니다.

이 시점에서 두보기 모두에서 View.invalidate으로 전화하는 것이 좋습니다. 이렇게하면 다시 그리기가 발생합니다. 잠금 화면 아래에 앱이 기술적으로 표시되어 있기 때문에 잠금 화면이 열려있는 동안 그리기 체인이 매우 불안정합니다.

registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context ctx, Intent intent) { 
      if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)) 

     } 
    }, new IntentFilter(Intent.ACTION_USER_PRESENT)); 
+0

제안에 감사드립니다. Colin. 나는 그것을 시도 할 것이다. –

+0

np! 희망을 밖으로 작동합니다 :) –

+0

감사합니다 콜린. 이것은 확실히 도움이되었지만 아직 해결 방법을 찾지 못했지만 귀하의 제안은 문제를 잘 보여줍니다. 문제는 잠금 화면을 보는 동안 onResume이 호출된다는 것입니다. 잠금 화면에서 상태 표시 줄이 보이기 때문에 부적절한 그리기가 발생합니다. 사용자의 의도를 받아들이면 문제를 해결하는 데 도움이됩니다. 이제 문제는 뷰에 대해 무효화를 호출해도 아무 효과가없는 것처럼 보였습니다. 그러나 그것은 쉬운 부분이어야합니다. 다시 한 번 감사드립니다! –

0

는 것 같습니다.
컨트롤러 (재생/일시 중지/ff/rew + 진행) 영역의 영향을 받았다고 생각하지 않습니까?

+0

hi JonA. 당신이 무슨 뜻인지 확실하지. 이 mediaplayer 인스턴스에 설정된 컨트롤러가 없습니다.하지만 컨트롤러 바가 간섭하지 않도록 내가해야 할 일이 있습니까? –

0

화면이 제자리에서 벗어나는 것을 방지하는 방법이있을 수 있습니다. 이는 다시 그리기 문제를 해결하는 데 도움이되기를 바랍니다.

관련 문제