Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保存我的Android VideoView';s的纵横比仅与高度成比例?_Android_Kotlin_Android Videoview - Fatal编程技术网

如何保存我的Android VideoView';s的纵横比仅与高度成比例?

如何保存我的Android VideoView';s的纵横比仅与高度成比例?,android,kotlin,android-videoview,Android,Kotlin,Android Videoview,我想设置一个填充屏幕并保留纵横比的视频。但是,我不希望视频与手机的纵横比匹配 如果我的屏幕的纵横比为18.9:9,而视频的纵横比为16:9,则当我将视频放在继承fill_parent的VideoView中时,它会出现拉伸。如果我没有设置fill_parent,那么视频将保留其纵横比,但只占屏幕的1/3以下,因为纵横比由其宽度而不是高度决定。这是不可取的 我想用视频垂直填充屏幕,不管部分宽度是否被剪掉 当前代码: window.setFormat(PixelFormat.TRANSLUCENT)

我想设置一个填充屏幕并保留纵横比的视频。但是,我不希望视频与手机的纵横比匹配

如果我的屏幕的纵横比为18.9:9,而视频的纵横比为16:9,则当我将视频放在继承fill_parent的VideoView中时,它会出现拉伸。如果我没有设置fill_parent,那么视频将保留其纵横比,但只占屏幕的1/3以下,因为纵横比由其宽度而不是高度决定。这是不可取的

我想用视频垂直填充屏幕,不管部分宽度是否被剪掉

当前代码:

window.setFormat(PixelFormat.TRANSLUCENT)
val videoView = findViewById < VideoView > (videoView)
val video = Uri.parse("android.resource://" + packageName + "/" +
    R.raw.bgvideo)
videoView.setVideoURI(video)
videoView.setOnPreparedListener {
    mp: MediaPlayer - >
        mp.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING)
    mp.isLooping = true
    mp.setScreenOnWhilePlaying(false)
}
videoView.start()
window.setFormat(像素格式.半透明)
val videoView=findViewById(videoView)
val video=Uri.parse(“android.resource://”+packageName+“/”+
R.raw.bg(视频)
videoView.setVideoURI(视频)
videoView.setOnPreparedListener{
mp:MediaPlayer->
mp.setVideoScalingMode(MediaPlayer.VIDEO\u缩放\u模式\u缩放到\u适合\u裁剪)
mp.isLooping=true
mp.setScreenOnWhilePlaying(假)
}
videoView.start()
XML:


当前结果:

预期结果:
以编程方式调整
视频视图的尺寸

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--parent needs to be matching the screen height-->
    <!--VideoView layout_width doesn't matter-->

    <VideoView
        android:id="@+id/video_player"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>
此代码不关心屏幕宽度

宽度将始终按屏幕高度缩放。实际上,它将始终缩放到(视频视图)自己的高度。但正如我对代码的评论,使用layout\u height=“match\u parent”匹配屏幕

如果屏幕宽度更大,我不确定您是否希望宽度合适


如果屏幕宽度更大,视频宽度将无法填满屏幕。

这个问题没有解决方案,它是6年前发布的。我们可能应该继续问我的问题。如果你有视频的分辨率,为什么不通过编程调整
视频视图的尺寸呢。@IsraeldelaCruz视频的纵横比是16:9,而屏幕的纵横比是18.9:9。如果我使用fill_parent,则视频会出现拉伸。我想让视频填满屏幕,即使部分高度会被剪掉。谢谢你的详细回答。现在就开始。AR高度是多少?您还可以提供您的XML吗?除非我遗漏了什么,否则你的代码似乎没有什么不同。我手机的纵横比是19.5:9。我希望高度填充屏幕,但宽度不受屏幕限制(它可能会溢出)。AR是纵横比。我说得太快了。这确实达到了我想要的效果。只需确保父布局是FrameLayout。您可能还想在这里发布您的解决方案:,因为我相信还没有选择任何答案,而且没有一个对我有效。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--parent needs to be matching the screen height-->
    <!--VideoView layout_width doesn't matter-->

    <VideoView
        android:id="@+id/video_player"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>
// at onCreate or anywhere

        // post, because view dimension is not initialized yet in here
        videoView.post(new Runnable() {
            @Override
            public void run() {
                // do resizing here
                // AR = aspect ratio

                float videoARWidth = 16.f;
                float videoARHeight = 9.f;

                // Phone screen aspect ratio height
                float screenARHeight = 9.f;

                // scale to screen AR height
                float videoScale = screenARHeight / videoARHeight;

                float videoARRatio = videoARWidth / videoARHeight;

                // scale the ratio to screen
                float videoScaledARRatio = videoARRatio * videoScale;

                ViewGroup.LayoutParams layoutParams = videoView.getLayoutParams();

                // make sure the VideoView matches the screen height
                layoutParams.width = (int)(videoView.getHeight() * videoScaledARRatio);
                videoView.setLayoutParams(layoutParams);
            }
        });