Camera2 API с предварительным просмотром TextureView/AutoFitTextureView растягивается в портретном режиме

После этого https://stackoverflow.com/a/44324039/1427037 https://inducesmile.com/android/android-camera2-api-example-tutorial/, но все же API camera2 дает растянутый предварительный просмотр в устройстве Samsung с ОС Android 9.0. Многие решения stackoverflow уже опробованы, но без каких-либо преимуществ. Любая помощь ? Примечание. Невозможно использовать API камеры с SurfaceHolder.


person Erum    schedule 09.01.2020    source источник
comment
перепроверенное приложение в ОС Android 6.0.1 работает нормально. это единственное растяжение в ОС Android 9. Любое решение?   -  person Erum    schedule 09.01.2020


Ответы (1)


проверьте это

  @Override
  public void setVideoURI(Uri uri) {
    super.setVideoURI(uri);
    MediaMetadataRetriever retr = new MediaMetadataRetriever();
    retr.setDataSource(uri.getPath());
    String height = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
    String width = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
    try {
      videoRealH = Integer.parseInt(height);
      videoRealW = Integer.parseInt(width);
    } catch (NumberFormatException e) {
      e.printStackTrace();
    }
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int width = getDefaultSize(0, widthMeasureSpec);
    int height = getDefaultSize(0, heightMeasureSpec);
    if (height > width) {

      if (videoRealH > videoRealW) {

        mVideoHeight = height;
        mVideoWidth = width;
      } else {
        mVideoWidth = width;
        float r = videoRealH / (float) videoRealW;
        mVideoHeight = (int) (mVideoWidth * r);
      }
    } else {
      if (videoRealH > videoRealW) {
        mVideoHeight = height;
        float r = videoRealW / (float) videoRealH;
        mVideoWidth = (int) (mVideoHeight * r);
      } else {
        mVideoHeight = height;
        mVideoWidth = width;
      }
    }
    if (videoRealH == videoRealW && videoRealH == 1) {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
      setMeasuredDimension(mVideoWidth, mVideoHeight);
    }

  }
person Rahul Chokshi    schedule 13.01.2020