После обновления нашего приложения мы теперь используем API-интерфейс Camera2, к сожалению, предварительный просмотр загружен на нашем тестовом устройстве: Samsung SM-J330F / DS, Android-версия 8.0.0, API 26
.не испытывайте эту проблему с проектом Googles Camera2Basic на одном устройстве, мы попытались настроить наш проект так, чтобы он использовал те же реализации предварительного просмотра.В настоящее время мы просто не можем выяснить точную причину различных предварительных просмотров между обоими проектами.
![Streched preview experienced with our preview.](https://i.stack.imgur.com/wIxKg.jpg)
Это ожидается:
![Correct preview of the Camera2Basic project on the same device](https://i.stack.imgur.com/gAAnF.jpg)
В отличие от проекта Camera2Basic наш RelativeLayout
создается программно в классе Activity, а затем к этому объекту добавляется AutoFitTextureView
:
mMainLayout = new FrameLayout(this);
mMainLayout.setBackgroundColor(Color.BLACK);
mMainLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
mPreview = new AutoFitTextureView(this);
mPreview.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, Gravity.TOP));
mMainLayout.addView(mPreview);
this.setContentView(mMainLayout);
Реализация AutoFitTextureView
такая же, как в проекте Camera2Basic.
Позже в классе Camera2 после установки предварительного просмотра в setUpCameraOutputs()
равным 640x480 px (разрешение, которое должно поддерживаться всеми устройствами) мы будем называть setAspectRatio(width, height)
в mPreview:
mPreviewSize = new Size(640, 480);
if (mFrameOrientation == Configuration.ORIENTATION_LANDSCAPE) {
mTextureView.setAspectRatio(
mPreviewSize.getWidth(), mPreviewSize.getHeight()
);
} else {
mTextureView.setAspectRatio(
mPreviewSize.getHeight(), mPreviewSize.getWidth()
);
}
Примечание: Также на более новых устройствах (например, Honor 10) предварительный просмотр выглядит хорошо.