После обновления нашего приложения мы теперь используем API-интерфейс Camera2, к сожалению, предварительный просмотр загружен на нашем тестовом устройстве: Samsung SM-J330F / DS, Android-версия 8.0.0, API 26
.не испытывайте эту проблему с проектом Googles Camera2Basic на одном устройстве, мы попытались настроить наш проект так, чтобы он использовал те же реализации предварительного просмотра.В настоящее время мы просто не можем выяснить точную причину различных предварительных просмотров между обоими проектами.
Это ожидается:
В отличие от проекта 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) предварительный просмотр выглядит хорошо.