android - ExoPlayer 调整大小仅在第一次调用时有效
问题描述
如上所述,我在更改 ExoPlayer 上的调整大小模式时遇到问题。我正在播放一个在滚动时更改的视频列表,并且取决于屏幕方向,如果视频靠近屏幕 AspectRatio,我试图放大视频,处理它的代码块是:
override fun onVideoSizeChanged(width: Int, height: Int, unappliedRotationDegrees: Int, pixelWidthHeightRatio: Float) {
super.onVideoSizeChanged(width, height, unappliedRotationDegrees, pixelWidthHeightRatio)
val displayMetrics = DisplayMetrics()
(context as Activity).windowManager.defaultDisplay.getMetrics(displayMetrics)
val displayAspectRatio = displayMetrics.widthPixels.toFloat() / displayMetrics.heightPixels
val videoAspectRatio = width.toFloat() / height
if (abs(videoAspectRatio - displayAspectRatio) < 0.2) {
exoPlayerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM
selectedPlayer?.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
} else {
exoPlayerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
selectedPlayer?.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
}
}
但是exoPlayerView.resizeMode
只有在第一次调用时才可见。还有其他方法可以做到这一点吗?或者也许强制视图重新渲染?
提前致谢!
解决方案
您可以使用 :exoplayer.videoFormat.width
和访问视频的大小exoplayer.videoFormat.height
,这样每当您的视频开始播放时,您就可以启动函数来计算比率并执行您的操作
推荐阅读
- java - 向提交表单 (JSP) 添加超时
- python - 在熊猫数据框中的某些字符之后提取数字
- java - 如何安排我的 kafka 活动在一刻钟和一刻钟进行?
- mysql - 在 mysql 触发器中,有没有办法知道哪一列正在更新?
- regex - 正则表达式:获取“路径”的倒数第二部分
- c++ - 模板函数产生未定义的引用错误
- sql - 对关系代数的 SQL 查询
- angular - Angular:根据单选按钮选择指定路线
- python - 在forms.py和views.py中创建chiled类字段时如何更改父类中的字段?
- flutter - 是否可以在 Flutter 中使用路由器实时查看连接的设备?