7

ExoPlayeonでビデオを再生しようとしてい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ます。

ここで何が間違っていますか?

UPD: スクリーンショットは次のとおりです。 ここに画像の説明を入力

4

2 に答える 2