Я создал виджет, который является расширением SurfaceView
(очень похоже на VideoView ), и я работаю над функцией полного растягивания видео на экране устройства при выполнении определенных действий. Я посмотрел на onMeasure
функцию VideoView
и переписал это так:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mStretchVideo) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} else {
int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
if (mVideoWidth > 0 && mVideoHeight > 0) {
if (mVideoWidth * height > width * mVideoHeight) {
height = width * mVideoHeight / mVideoWidth;
} else if (mVideoWidth * height < width * mVideoHeight) {
width = height * mVideoWidth / mVideoHeight;
}
}
setMeasuredDimension(width, height);
}
}
Кажется, это работает нормально, если я полностью остановлю видео и начну воспроизведение снова. Теперь я пытаюсь принудительно обновить SurfaceView
после установки флага растяжки, чтобы видео растягивалось во время воспроизведения, но я не мог понять, как принудительно обновить SurfaceView
. Я пытался android.view.View.invalidate()
, android.view.View.refreshDrawableState()
и вызывал android.view.View.measure(int, int)
напрямую с разными комбинациями, но не добился успеха. Есть идеи?