В настоящее время я работаю над воспроизведением видео (файл .mp4, который хорошо работает на обоих планшетах Android) в VideoView. Сначала я использовал VideoView, но устройство (EKEN M003S) воспроизводило видео в полноэкранном режиме, а не в VideoView, для которого я установил ширину и высоту на 272 x 153 dp. Поэтому я попытался создать расширенный класс VideoView для переопределения onMeasure () и changeVideoSize (). Как это:
public class EkenVideoView extends VideoView {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//Log.i("@@@@", "onMeasure");
int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
if (mVideoWidth > 0 && mVideoHeight > 0) {
if ( mVideoWidth * height > width * mVideoHeight ) {
//Log.i("@@@", "image too tall, correcting");
height = width * mVideoHeight / mVideoWidth;
} else if ( mVideoWidth * height < width * mVideoHeight ) {
//Log.i("@@@", "image too wide, correcting");
width = height * mVideoWidth / mVideoHeight;
} else {
//Log.i("@@@", "aspect ratio is correct: " +
//width+"/"+height+"="+
//mVideoWidth+"/"+mVideoHeight);
}
}
if (screenMode == DisplayMode.ORIGINAL) {
if (mVideoWidth > 0 && mVideoHeight > 0) {
if ( mVideoWidth * height > width * mVideoHeight ) {
// video height exceeds screen, shrink it
height = width * mVideoHeight / mVideoWidth;
} else if ( mVideoWidth * height < width * mVideoHeight ) {
// video width exceeds screen, shrink it
width = height * mVideoWidth / mVideoHeight;
} else {
// aspect ratio is correct
}
}
}
else if (screenMode == DisplayMode.FULL_SCREEN) {
// just use the default screen width and screen height
}
else if (screenMode == DisplayMode.ZOOM) {
// zoom video
if (mVideoWidth > 0 && mVideoHeight > 0 && mVideoWidth < width) {
height = mVideoHeight * width / mVideoWidth;
}
}
//Log.i("@@@@@@@@@@", "setting size: " + width + 'x' + height);
setMeasuredDimension(272, 153);
}
public void changeVideoSize(int width, int height)
{
mVideoWidth = width;
mVideoHeight = height;
// not sure whether it is useful or not but safe to do so
getHolder().setFixedSize(272, 153);
requestLayout();
invalidate(); // very important, so that onMeasure will be triggered
}
Я ввел ширину 272 и высоту 153, чтобы заставить ширину и высоту видео .mp4 иметь этот размер, но EKEN M003S продолжает воспроизводить видео в полноэкранном режиме. Поэтому, когда я запускаю приложение, все работает нормально, и видео воспроизводится в полноэкранном режиме на слое ниже всех других видов, что делает действие прозрачным с видео под ним.
Кроме EKEN M003S, я уверен, что некоторые устройства также имеют функции для принудительного воспроизведения видео в полноэкранном режиме по умолчанию, а также есть способ переопределить эту настройку по умолчанию. Если есть способ, пожалуйста, научите меня, как это сделать. Спасибо.