Я создаю приложение для Android, но устройство имеет квадратный экран. Экран 320x320 и приложение камеры использует SurfaceView для предварительного просмотра, как показано ниже:Android Camera Preview на квадратном экране растягивается
mCameraView = (SurfaceView) findViewById(R.id.surface);
LayoutParams params = mCameraView.getLayoutParams();
int camera_dimension = getResources().getInteger(R.integer.camera_dimension);
params.height = camera_dimension; //320px
params.width = camera_dimension;
mCameraView.setLayoutParams(params);
mCameraViewHolder = mCameraView.getHolder();
mCameraViewHolder.addCallback(this);
mCameraViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
На поверхности изменился, я делаю это, и это работает, но сторонник предварительный просмотр W480 х H320
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
int mWidth = w;
int mHeight = h;
int mFormat = format;
try {
mCameraAccess.mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
Camera.Parameters param = mCameraAccess.mCamera.getParameters();
List<Camera.Size> SupportedPreview = param.getSupportedPreviewSizes();
int ScreenSize = getResources().getInteger(R.integer.camera_dimension);
for (int i = 0; i < SupportedPreview.size(); i++) {
if (SupportedPreview.get(i).height == ScreenSize) {
param.setPreviewSize(SupportedPreview.get(i).width, SupportedPreview.get(i).height);
break;
}
}
mCameraAccess.mCamera.setParameters(param);
mCameraAccess.mCamera.startPreview();
}
Как можно убедиться, что мой предварительный просмотр внутри зрителя не сжимается, а является своего рода центральной фигурой. Поскольку предварительный просмотр представляет собой прямоугольник, мне просто нужен квадрат с центром на изображении. Обычно я использую scaleType, но не поддерживается в Surface view
Любая идея?