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