Android: Resize the video correctly on layout changes ()

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

@ -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;