gpt4 book ai didi

android - 将卡片 View 高度扩展到包含的 exoplayer 的高度,仅裁剪 exoplayer 的左右两侧

转载 作者:行者123 更新时间:2023-12-05 00:04:49 32 4
gpt4 key购买 nike

我在 CardView 的 RecyclerView 中有一个 ex0player。 exoplayer 的高度需要根据包含的视频的高度以编程方式更改。此高度值以 像素 的形式从 API 调用返回。这是 ViewHolder 的布局:

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:cardCornerRadius="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">


<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/communityPlayableCl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>


<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/toroPlayerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/transparent"
android:visibility="invisible"
app:controller_layout_id="@layout/v_player_controls"
app:keep_content_on_player_reset="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/communityPlayableIv"
app:player_layout_id="@layout/toro_exo_player_view"
app:resize_mode="zoom"
app:show_buffering="when_playing"
app:shutter_background_color="@android:color/transparent"
app:surface_type="texture_view"
app:use_controller="false" />

<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/communityPlayableIv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:background="@color/black"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="0dp"
tools:src="@color/alpha_grey" />

<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/volumeIv"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="bottom|end"
android:padding="15dp"
android:src="@drawable/ic_volume_off"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.cardview.widget.CardView>

这是我调整高度和纵横比的方法:

   if (model.mediaHeight != 0 && model.mediaHeight != null ) {
communityPlayableCl.requestLayout()
communityPlayableCl.layoutParams.height = model.mediaHeight

}



val constraintSet = ConstraintSet()
constraintSet.clone(communityPlayableCl)
constraintSet.setDimensionRatio(itemView.id,model.mediaAspectRatio)
constraintSet.applyTo(communityPlayableCl)

这会裁剪 640x640 视频的顶部和底部

最佳答案

您可以使用类似这样的方法从视频中获取尺寸。我还会在 Uri.parse 周围添加一个 try/catch,如果无法解析文件,它将失败。

Pair<Integer, Integer> getMediaDimensions(File file, Context context) {
if (!file.exists()) return null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(context, Uri.parse(file.getAbsolutePath()));
int width = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
int height = Integer.valueOf(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
retriever.release();

return new Pair<>(width, height);
}

从那里,您可以在计算比率后手动计算和设置新的高度/宽度。或者,使用 ConstraintLayout 作为播放器的容器并将其 layout_constraintDimensionRatio 设置为类似 H,1:1 的内容,并将每个 1 替换为您的宽度/高度。

如果你使用的是 Kotlin,可以关注 this post进行相应调整,并添加可重用的扩展。

关于android - 将卡片 View 高度扩展到包含的 exoplayer 的高度,仅裁剪 exoplayer 的左右两侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61799777/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com