ExoPlaye
onでビデオを再生しようとしていTextureView
ます。ビューに合わせてビデオをスケーリングおよびトリミングするために、マトリックスを使用します。私のカスタム ビューは `TextureView' を拡張します ここに私のコードがあります:
@Override
public void onVideoSizeChanged(int width, int height, float pixelWidthHeightRatio) {
updateTextureViewSize(width, height);
Log.v("EXO", "onVideoSizeChanged() " + width + "x" + height);
}
private void updateTextureViewSize(float videoWidth, float videoHeight) {
float viewWidth = getWidth();
float viewHeight = getHeight();
float scaleX = 1.0f;
float scaleY = 1.0f;
float viewRatio = viewWidth / viewHeight;
float videoRatio = videoWidth / videoHeight;
if (viewRatio > videoRatio) {
// video is higher than view
scaleY = videoHeight / videoWidth;
} else {
//video is wider than view
scaleX = videoWidth / videoHeight;
}
Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, viewWidth / 2, viewHeight / 2);
setTransform(matrix);
}
長方形のビューがあり、完璧に機能しました。しかし、ビューには 2 つの状態があります: 展開された (まだ長方形の古いもの) と折りたたまれた (高さが小さくなっています)。
そのため、これらの折りたたまれたビューでは、ビデオが垂直方向に引き伸ばされます。
たとえば、私はビュー1080x480
とビデオを持っていますが、360x640
ビデオがスケーリングされ、トリミングされ1080x1080
、ストレッチされているように見え1080x480
ます。
ここで何が間違っていますか?