Android layout Exoplayer2是否总是导致至少调用onSurfaceSizeChanged()两次?
我的应用程序使用一个自定义框架布局,其中包含一个PlayerView和另一个自定义框架布局(“DrawView”)。目标是在显示在正在播放的视频顶部的FrameLayout上绘制自定义形状 在布局中,首先是PlayerView,然后是DrawView:Android layout Exoplayer2是否总是导致至少调用onSurfaceSizeChanged()两次?,android-layout,exoplayer2.x,Android Layout,Exoplayer2.x,我的应用程序使用一个自定义框架布局,其中包含一个PlayerView和另一个自定义框架布局(“DrawView”)。目标是在显示在正在播放的视频顶部的FrameLayout上绘制自定义形状 在布局中,首先是PlayerView,然后是DrawView: <!-- customized FrameLayout encompassing ViewPager2 and DrawView, which implements that capability of detecting
<!-- customized FrameLayout encompassing ViewPager2 and DrawView, which implements that capability of
detecting taps -->
<com.reddragon.intouch.utils.ViewPager2Host
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/viewpager2host"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
tools:context=".ui.MediaPlayerActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/activity_media_player_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.viewpager2.widget.ViewPager2>
<com.reddragon.intouch.ui.drawview.DrawView
android:id="@+id/drawView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
这里是我的问题-onSurfaceSizeChanged()
被多次调用,我只想为DrawView
计算一次大小和位置。从我的测试中可以看出,只要ViewPager2Host
父级不更改维度,那么onSurfaceSizeChanged()
就会被调用两次,第二次是“最终”维度
有人能证实这一点吗?或者,是否存在这样的情况—可能是父维度与SurfaceSizeChanged()
上只调用一次的视频表面视图维度完全匹配
或者是否有某种方法可以知道曲面大小何时为“最终”
我正在尝试实现某种“如果视频正在初始化,那么”逻辑,这样只有在所有布局完成并且视频表面rect完成之后,我需要计算DrawView的大小和位置。对于我最初的问题,简单的答案似乎是:否-除了至少调用一次之外,无法保证在正常渲染管道中调用了多少次 经过进一步测试,也很明显,即使在使用STATE_READY调用onPlayerStateChanged()之后,视频大小仍然不稳定(我已经多次看到,即使在调用STATE_READY之后,onSurfaceSizeChanged()也会使用更新的值调用) 因此,我最初的想法是在播放后处理onPlayerStateChanged()中的所有内容,而现在看来这并不是一个好的答案 仍在寻找我如何能告诉视频表面已经安定下来的大小,它认为是“最终”播放视频 作为复习,我的自定义FrameLayout有三个“层”(每个层完全填满与当前ViewPager2适配器关联的支架):