web-dev-qa-db-ja.com

センタークロップAndroid VideoView

ImageView.ScaleType のCENTER_CROPのようなものを探しています

画像を均一にスケーリングし(画像のアスペクト比を維持)、画像の両方の寸法(幅と高さ)がビューの対応する寸法(マイナスパディング)以上になるようにします。次に、画像がビューの中央に配置されます。 XMLから、次の構文を使用します:Android:scaleType = "centerCrop"

videoViewの場合。このようなものは存在しますか?

22
clocksmith

TextureViewでのみこれを達成できます。 (surfaceViewも機能しません)。これは、センタークロップ機能を備えたtextureViewでビデオを再生するためのライブラリです。 TextureViewは、残念ながらAPIレベル14以上でのみ使用できます。

https://github.com/dmytrodanylyk/Android-video-crop

もう1つの可能性は、ビデオビューを適切にズームインすることですが、まだ試していません。

15
Jordy

ConstraintLayoutを使用している場合のシンプルで簡単な方法。

xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

    <VideoView
        Android:id="@+id/videoView"
        Android:layout_width="@dimen/dimen_0dp"
        Android:layout_height="@dimen/dimen_0dp"
        Android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

その後

videoView.setOnPreparedListener { mediaPlayer ->
    val videoRatio = mediaPlayer.videoWidth / mediaPlayer.videoHeight.toFloat()
    val screenRatio = videoView.width / videoView.height.toFloat()
    val scaleX = videoRatio / screenRatio
    if (scaleX >= 1f) {
        videoView.scaleX = scaleX
    } else {
        videoView.scaleY = 1f / scaleX
    }
}

そして、これは私のために働いた。

4
Nabin
//store the SurfaceTexture to set surface for MediaPlayer
mTextureView.setSurfaceTextureListener(new SurfaceTextureListener() {
@Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface,
            int width, int height) {
        FullScreenActivity.this.mSurface = surface;

    }
1
Hitesh Singh

ナビンKシュレスタの答えは私のために働いた。

Javaバージョン:

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        float videoRatio = mp.getVideoWidth() / (float) mp.getVideoHeight();
        float screenRatio = videoView.getWidth() / (float) videoView.getHeight();
        float scaleX = videoRatio / screenRatio;
        if (scaleX >= 1f) {
            videoView.setScaleX(scaleX);
        } else {
            videoView.setScaleY(1f / scaleX);
        }
    }
});
0
grez