Android 그림 속 그림 모드 구현 예제

그림 지지
Android 8.0(API 레벨 26)에 서 는 그림 모드 로 Activity 를 시작 할 수 있 습 니 다.그림 속 그림 은 특수 한 유형의 다 중 창 모드 로 영상 재생 에 가장 많이 사용 된다.이 모드 를 사용 하면 사용 자 는 화면 한 귀퉁이 에 고정된 작은 창 을 통 해 영상 을 볼 수 있 으 며,동시에 응용 프로그램 간 에 내 비게 이 션 을 하거나 메 인 화면의 내용 을 탐색 할 수 있다.
그림 속 그림 은 Android 7.0 의 다 중 창 모드 API 를 이용 하여 고정된 비디오 중첩 창 을 제공 합 니 다.그림 속 그림 을 응용 프로그램 에 추가 하려 면 그림 속 그림 을 지원 하 는 Activity 를 등록 하고 필요 에 따라 Activity 를 그림 속 그림 모드 로 전환 하 며 Activity 가 그림 속 그림 모드 에 있 을 때 인터페이스 요소 가 숨겨 진 상태 에 있 고 동 영상 이 계속 재생 되도록 해 야 합 니 다.
그림 속 그림 창 은 화면 맨 위 에 표시 되 며 시스템 이 선택 한 구석 에 있 습 니 다.그림 의 창 을 다른 위치 로 끌 어 다 놓 을 수 있 습 니 다.이 창 을 누 르 면 두 개의 특수 한 컨트롤 을 볼 수 있 습 니 다.전체 화면 전환 스위치(창의 중심 에 있 음)와 닫 기 단추(오른쪽 상단 에 있 는"X")입 니 다.
현재 Activity 가 그림 모드 에 언제 들 어 갈 지 제어 합 니 다.다음은 몇 가지 예 이다.
  • Activity 는 사용자 가 메 인 화면 이나 최근 에 사용 한 응용 단 추 를 눌 러 다른 응용 프로그램 을 선택 할 때 그림 그리 기 모드 에 들 어 갈 수 있 습 니 다.(Google 지도 가 사용자 가 다른 Activity 를 동시에 실행 할 때 방향 을 계속 표시 하 는 방식 입 니 다.)
  • 사용자 가 특정한 동 영상 에서 다른 내용 을 조회 할 때 이 동 영상 을 그림 모드 로 전환 할 수 있 습 니 다.
  • 사용자 가 특정한 내용 을 볼 때 영상 을 그림 모드 로 전환 할 수 있 습 니 다.메 인 화면 에는 이 드라마 의 다음 회 에 대한 홍보 정보 나 줄거리 요약 정보 가 표시 된다.
  • 사용 자 는 동 영상 을 볼 때 다른 내용 을 재생 대기 열 에 추가 할 수 있 는 방식 을 제공 할 수 있 습 니 다.메 인 화면 에 내용 을 표시 하고 Activity 를 선택 하면 영상 은 계속 그림 모드 로 재생 된다.
  • 그림 에 대한 지 지 를 성명 하 다.
    기본 적 인 상황 에서 시스템 은 자동 으로 응용 프로그램 에 그림 지원 을 제공 하지 않 습 니 다.응용 프로그램 에서 그림 을 지원 하려 면 android:supportsPictureInPicture 와 android:resizeableActivity 를 true 로 설정 하고 목록 에 비디오 Activity 를 등록 할 수 있 습 니 다.또한,Activity 를 지정 하면 레이아웃 설정 변경 을 처리 합 니 다.그림 속 그림 모드 전환 기간 에 레이아웃 변경 이 발생 하면 Activity 가 다시 시작 되 지 않 습 니 다.
    
      <activity android:name="VideoActivity"
        android:resizeableActivity="true"
        android:supportsPictureInPicture="true"
        android:configChanges=
          "screenSize|smallestScreenSize|screenLayout|orientation"
        ...
    Activity 를 그림 모드 로 전환 합 니 다.
    그림 속 그림 모드 에 들 어가 기 위해 서 는 Activity 가 enterPictureInPictureMode()를 호출 해 야 합 니 다.예 를 들 어 다음 코드 는 사용자 가 응용 인터페이스의 전용 단 추 를 클릭 할 때 Activity 를 그림 모드 로 전환 합 니 다.
    
      @Override
      public void onActionClicked(Action action) {
        if (action.getId() == R.id.lb_control_picture_in_picture) {
          getActivity().enterPictureInPictureMode();
          return;
        }
        ...
      }
    
    Activity 를 배경 으로 들 어 가 는 대신 그림 모드 로 전환 하 는 논 리 를 추가 해 야 할 수도 있 습 니 다.예 를 들 어 사용자 가 Google 지도 에서 내 비게 이 션 을 하고 있 을 때 메 인 화면 이나 최근 에 사용 한 앱 단 추 를 누 르 면 이 앱 은 그림 그리 기 모드 로 전 환 됩 니 다.onUserLeave Hint()를 교체 하여 이러한 상황 을 구체 적 으로 알 수 있 습 니 다.
    
      @Override
      public void onUserLeaveHint () {
        if (iWantToBeInPipModeNow()) {
          enterPictureInPictureMode();
        }
      }
    
    그림 에 그 리 는 동안 인터페이스 처리
    Activity 가 그림 속 그림 모드 에 들 어가 거나 종료 할 때 시스템 은 Activity.onPictureInPictureModeChanged()또는 Fragment.onPictureInPictureModeChanged()를 호출 합 니 다.
    Activity 의 인터페이스 요 소 를 다시 그 리 려 면 이 반전 을 교체 해 야 합 니 다.그림 속 그림 모드 에서 Activity 가 작은 창 에 표 시 됩 니 다.그림 속 그림 모드 에서 사용 자 는 작은 인터페이스 요소 의 상세 한 정 보 를 잘 볼 수 없 기 때문에 이런 인터페이스 요소 와 상호작용 하지 않 을 것 이다.인터페이스 가 매우 간단 한 영상 재생 Activity 는 뛰어난 사용자 체험 을 제공 할 수 있다.Activity 는 비디오 재생 컨트롤 만 표시 해 야 합 니 다.Activity 가 그림 모드 에 들 어가 기 전에 다른 인터페이스 요 소 를 제거 하고 Activity 가 다시 전체 화면 으로 변 할 때 이 요 소 를 복원 합 니 다.
    
      @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.
          ...
        }
      }
    
    컨트롤 추가
    그림 속 그림 창 은 사용자 가 창 메뉴 를 열 때 컨트롤 을 표시 합 니 다.
    활성 화 된 미디어 세 션 을 사용 하면 재생,일시 정지,다음,이전 컨트롤 이 표 시 됩 니 다.
    그림 속 그림 모드 에 들 어가 기 전에 PictureInPictureParams(PictureInPictureParams.Builder.setActions()를 사용 하여 사용자 정의 작업 을 명 확 히 지정 할 수 있 습 니 다.또한 enterPictureInPictureMode(android.app.PictureInPictureParams)나 setPictureInPictureParams(android.app.PictureInPictureParams)를 사용 하여 그림 속 그림 모드 에 들 어 갈 때 이 인 자 를 전달 합 니 다.추가 하려 는 컨트롤 수가 getMaxNumPictureInPictureActions()를 초과 하면 시스템 은 상한 수량의 컨트롤 만 추가 합 니 다.
    그림 속 그림 모드 에서 영상 을 계속 재생 합 니 다.
    Activity 가 그림 모드 로 전환 되면 시스템 은 이 Activity 를 일시 정지 상태 로 두 고 Activity 의 onPause()방법 을 호출 합 니 다.이 액 티 비 티 가 그림 속 그림 모드 에서 멈 추 면 동 영상 재생 은 멈 추 지 않 고 계속 재생 해 야 한다.
    Android 7.0 및 더 높 은 버 전에 서 시스템 이 Activity 의 onStop()을 호출 할 때 비디오 재생 을 중단 해 야 합 니 다.시스템 이 Activity 의 onStart()를 호출 할 때 비디오 재생 을 복원 해 야 합 니 다.이렇게 되면 onPause()에서 응용 프로그램 이 그림 모드 에 있 는 지 확인 하지 않 고 동 영상 을 계속 재생 하면 됩 니 다.
    onPause()구현 중 재생 을 중단 해 야 한다 면,isInPictureInPictureMode()를 호출 하여 그림 속 그림 모드 를 확인 하고 재생 상황 을 처리 하 십시오.예 를 들 어:
    
      @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.
          ...
        }
      }
    
    Activity 가 그림 에서 전체 화면 모드 로 전환 되면 시스템 은 Activity 를 복원 하고 onResume()방법 을 호출 합 니 다.
    단일 재생 Activity 에 그림 그리 기 모드 사용 하기
    응용 프로그램 에서 사용 자 는 메 인 화면 에서 내용 을 조회 할 때 새로운 동 영상 을 선택 할 수 있 습 니 다.또한 동 영상 재생 Activity 가 그림 속 그림 모드 에 있 습 니 다.사용자 가 곤 혹 스 러 워 할 수 있 는 새로운 액 티 비 티 를 시작 하 는 대신 기 존 재생 액 티 비 티 에서 전체 화면 모드 로 새로운 영상 을 재생 해 야 한다.
    단일 Activity 를 비디오 재생 요청 에 사용 하고 필요 에 따라 그림 모드 에 들 어가 거나 종료 하려 면 목록 에서 Activity 의 android:launchMode 를 singleTask 로 설정 하 십시오.
    
      <activity android:name="VideoActivity"
        ...
        android:supportsPictureInPicture="true"
        android:launchMode="singleTask"
        ...
    Activity 에서 onNewIntent()를 교체 하고 새로운 동 영상 을 처리 하여 필요 에 따라 기 존 동 영상 재생 을 중단 합 니 다.
    최선 의 방법
    저 메모리 장 치 는 그림 속 그림 모드 를 사용 할 수 없 을 수도 있 습 니 다.그림 에 그림 을 사용 하기 전에 hasSystemFeature(Package Manager.FEATURE 호출 을 통 해PICTURE_IN_PICTURE)그림 속 그림 을 사용 할 수 있 도록 검사 합 니 다.
    그림 속 그림 은 전체 화면 동 영상 을 재생 하 는 Activity 를 위 한 것 이다.Activity 를 그림 모드 로 전환 할 때 동 영상 내용 이외 의 내용 은 표시 하지 마 십시오.Activity 가 그림 속 그림 모드 에 언제 들 어 갈 지 추적 하고 인터페이스 요 소 를 숨 깁 니 다.예 를 들 어 그림 속 그림 을 그 리 는 동안 인터페이스 에서 말 한 것 과 같 습 니 다.
    그림 의 창 이 화면의 한 귀퉁이 에 유동 창 으로 표시 되 기 때문에 메 인 화면 에 그림 의 창 이 가 려 질 수 있 는 모든 영역 에 중요 한 정 보 를 표시 하 는 것 을 피해 야 합 니 다.
    Activity 가 그림 속 그림 모드 에 들 어가 면 기본적으로 입력 초점 을 얻 지 못 합 니 다.그림 속 그림 모드 에서 입력 이 벤트 를 받 으 려 면 MediaSession.setCallback()을 사용 하 십시오.setCallback()을 어떻게 사용 하 는 지 자세히 알 고 싶 으 시 면'재생 중'카드 를 참조 하 십시오.
    그림 모드 에 있 을 때 그림 창 에 있 는 비디오 재생 은 다른 응용 프로그램(예 를 들 어 음악 재생 기 응용 프로그램 이나 음성 검색 응용 프로그램)에 오디 오 방 해 를 줄 수 있 습 니 다.이 문제 가 발생 하지 않도록 비디오 재생 을 시작 할 때 오디 오 초점 을 요청 하고 오디 오 초점 변경 알림 을 처리 하 십시오.예 를 들 어 오디 오 초점 관리 에서 말 한 것 과 같 습 니 다.그림 속 그림 모드 에 있 을 때 오디 오 초점 분실 알림 을 받 으 면 비디오 재생 을 중단 하거나 중단 하 십시오.
    안 드 로 이 드 화중 화 모델 의 실현 예시 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 화중 화 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기