안 드 로 이 드 비디오 재생

안 드 로 이 드 개발 에서 흔히 볼 수 있 는 영상 재생 문제 입 니 다.일반적인 영상 에 서 는 videoView+MediaController 또는 mediaController+serfercie holder 를 직접 사용 합 니 다.
흔 한 문제
1 재생 중 플레이어 의 가로 화면 전환 과 플레이어 의 문안 에 표 시 된 레이아웃 변 화 를 어떻게 처리 합 니까?
activity 에 설정

 android:configChanges="orientation|screenSize"
이렇게 회전 중 에 activity 는 재 구축 되 지 않 습 니 다.
재 작성 시스템 방법

public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
      initVideoLandLayout();
    } else {
      initVideoPortLayout();
    }
  }
new Config.orientation 을 판단 하여 현재 가로 화면 인지 세로 화면 인지 판단 합 니 다.이것 은 동 영상 을 보 는 과정 에서 가로 화면 인지 세로 화면 인지 판단 합 니 다.우리 문 이 처음에 동 영상 을 재생 할 때 도 판단 할 수 있 습 니 다.구체 적 인 처리 방법 은?

 private void initVideoPlayerLayout() {
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    width = dm.widthPixels;
    heigh = dm.heightPixels;
    if (width / heigh > 0) { //   
      initVideoLandLayout();
      fullscreen = true;
    }
    if (width / heigh == 0) { //  
      initVideoPortLayout();
    }
  }
플레이어 의 레이아웃 을 구체 적 으로 바 꿀 때 우 리 는 동적 으로 바 꿀 수 있다.

 private void initVideoPortLayout() {
    RelativeLayout.LayoutParams videoLp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    videoLp.addRule(RelativeLayout.CENTER_IN_PARENT);
    videoView.setLayoutParams(videoLp);
    videoView.start();
    RelativeLayout.LayoutParams hotelInfoLp = new RelativeLayout.LayoutParams(DeviceInfoUtil.getPixelFromDip(200), DeviceInfoUtil.getPixelFromDip(55));
    hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    hotelInfoLp.rightMargin = DeviceInfoUtil.getPixelFromDip(8);
    hotelInfoLp.bottomMargin = DeviceInfoUtil.getPixelFromDip(90);
    mHotelInfoLayout.setLayoutParams(hotelInfoLp);
  }
세로 처리 입 니 다.  

private void initVideoLandLayout() {
    RelativeLayout.LayoutParams layoutParams =
        new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    videoView.setLayoutParams(layoutParams);
    RelativeLayout.LayoutParams hotelInfoLp = new RelativeLayout.LayoutParams(DeviceInfoUtil.getPixelFromDip(200), DeviceInfoUtil.getPixelFromDip(55));
    hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    hotelInfoLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    hotelInfoLp.rightMargin = DeviceInfoUtil.getPixelFromDip(8);
    hotelInfoLp.bottomMargin = DeviceInfoUtil.getPixelFromDip(95);
    mHotelInfoLayout.setLayoutParams(hotelInfoLp);
  }
가로 처리 입 니 다.
우리 문 은 시스템 의 videoView 컨트롤 이 자체 적 으로 재생,일시 정지 등 진도 가 있다 는 것 을 알 고 있 습 니 다.이것 은 MediaContronler 입 니 다.우리 가 손 으로 클릭 할 때 진도 가 표시 되 고 손 이 화면 을 떠 날 때 표시 되 지 않 습 니 다.이것 은 videoView 의 방법 입 니 다.

 @Override
  public boolean onTouchEvent(MotionEvent ev) {
    if (isInPlaybackState() && mMediaController != null) {
      toggleMediaControlsVisiblity();
    }
    return false;
  }
내 려 다 보다

private void toggleMediaControlsVisiblity() {
    if (mMediaController.isShowing()) {
      mMediaController.hide();
    } else {
      mMediaController.show();
    }
  }
최종 조정 은 mMediaController.hide()입 니 다.mMediaController.show()와
그래서 우리 문 은 자신의 플레이어 인터페이스 에서 자신의 레이아웃 과 플레이어 진도 바 를 실현 하면 hide()와 show()방법 을 다시 쓰 면 됩 니 다.
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 안 드 로 이 드 재생 영상 에서 흔히 볼 수 있 는 문제 의 매듭 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기