我正在尝试使用Android上的ExoPlayer构建类似YouTube的视图。我希望视频显示在顶部,然后是其他一些内容,如标题,说明等。我的所有视频都是16:9,我希望SimpleExoPlayerView
以16:9的布局开始。使用下面的布局,播放器占用整个屏幕几秒钟,然后切换到视频的正确宽高比:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:keepScreenOn="true">
<com.google.android.exoplayer2.ui.SimpleExoPlayerView android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:resize_mode="fixed_width">
</com.google.android.exoplayer2.ui.SimpleExoPlayerView>
<TextView
android:id="@+id/text_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="VideoTitle"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:id="@+id/text_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="description" />
</LinearLayout>
答案 0 :(得分:1)
由于SimpleExoPlayerView的高度为&#34; wrap_content&#34;,系统需要时间来测量正确的高度(如您所述,需要几秒钟)。我建议你根据实际宽度使用特定的高度值。例如,使用sw360的设备的高度应为203,使用sw400的设备的高度应为225,使用sw480的设备的高度应为270.通过这种方式,您还可以保持16:9的宽高比
答案 1 :(得分:0)
我们未使用SimpleExoPlayer
(我们仅使用Surface
代替),但我们将其换成FixedAspectRatioFrameLayout
。
SimpleExoPlayer
应该嵌套在FrameLayout
中,宽度和高度设置为match_parent
,它应该填充正确的空格。
如果有问题,请告诉我。
[编辑] 在FixedAspectRatioFrameLayout中:
mAspectRatioWidth = a.getInt(R.styleable.FixedAspectRatioFrameLayout_aspectRatioWidth, 4);
mAspectRatioHeight = a.getInt(R.styleable.FixedAspectRatioFrameLayout_aspectRatioHeight, 3);
如果说4和3,那就是你把16和9放在哪里。
答案 2 :(得分:0)
我们正在使用ExpoPlayer随附的捆绑AspectRatioFrameLayout
:
https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/AspectRatioFrameLayout.html
这就是您的使用方式:
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:resize_mode="fixed_width">
<!-- Preview image -->
<ImageView
android:id="@+id/imageViewVideo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:contentDescription="@string/img_content_training_video_preview"
android:focusable="true"
android:scaleType="centerCrop" />
<!-- Play button -->
<ImageView
android:id="@+id/imageTrainingPreviewIcon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:contentDescription="@string/img_content_training_video_preview"
android:scaleType="fitCenter"
android:src="@drawable/ic_play" />
<!-- Video player -->
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBlack"
android:visibility="gone" />
<!-- ProgressBar -->
<include layout="@layout/custom_video_loading_progressbar" />
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
然后在您的活动或片段上必须设置纵横比:
aspectRatioFrameLayout.setAspectRatio(16f/9f)
您还可以使用setResizeMode
在代码中设置调整大小模式。