具有固定宽高比的ExoPlayer布局

时间:2018-02-22 19:10:07

标签: android exoplayer

我正在尝试使用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>

3 个答案:

答案 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在代码中设置调整大小模式。