Android: Resize the video correctly on layout changes (#432)

The transform matrix was not being recalculated when the View
dimensions changed. Fixed by copying the code from the scaleVideoSize
method from the ScalableVideoView.

https://github.com/yqritc/Android-ScalableVideoView/blob/master/library/src/main/java/com/yqritc/scalablevideoview/ScalableVideoView.java#L95
This commit is contained in:
Arjan Scherpenisse 2017-01-11 13:47:56 +01:00 committed by Matt Apperson
parent fe6bc4f3df
commit cd53e389a0

View File

@ -1,6 +1,7 @@
package com.brentvatne.react; package com.brentvatne.react;
import android.content.res.AssetFileDescriptor; import android.content.res.AssetFileDescriptor;
import android.graphics.Matrix;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.net.Uri; import android.net.Uri;
import android.os.Handler; import android.os.Handler;
@ -19,6 +20,8 @@ import com.yqritc.scalablevideoview.ScalableVideoView;
import com.android.vending.expansion.zipfile.APKExpansionSupport; import com.android.vending.expansion.zipfile.APKExpansionSupport;
import com.android.vending.expansion.zipfile.ZipResourceFile; import com.android.vending.expansion.zipfile.ZipResourceFile;
import com.yqritc.scalablevideoview.ScaleManager;
import com.yqritc.scalablevideoview.Size;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@ -140,6 +143,30 @@ public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnP
return super.onTouchEvent(event); return super.onTouchEvent(event);
} }
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (!changed || !mMediaPlayerValid) {
return;
}
int videoWidth = getVideoWidth();
int videoHeight = getVideoHeight();
if (videoWidth == 0 || videoHeight == 0) {
return;
}
Size viewSize = new Size(getWidth(), getHeight());
Size videoSize = new Size(videoWidth, videoHeight);
ScaleManager scaleManager = new ScaleManager(viewSize, videoSize);
Matrix matrix = scaleManager.getScaleMatrix(mScalableType);
if (matrix != null) {
setTransform(matrix);
}
}
private void initializeMediaPlayerIfNeeded() { private void initializeMediaPlayerIfNeeded() {
if (mMediaPlayer == null) { if (mMediaPlayer == null) {
mMediaPlayerValid = false; mMediaPlayerValid = false;