我有点困惑的角色forceLayout(),requestLayout()以及invalidate()该方法的View类.
他们何时被召唤?
我正在尝试为JWPlayer创建一个react-native插件,现在(在android部分中)我可以在屏幕上看到视频(在react视图定义的位置)甚至是按钮,但是当我播放时视频我在背景音乐播放时看到黑屏.奇怪的是,当我将JWPlayerView放入WindowManager时,视频会在中心的全屏上正确显示.
我究竟做错了什么?
这是反应原生代码:
<View>
<JWPlayer
style={{width: 320, height: 240}}
src='http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4' />
</View>
Run Code Online (Sandbox Code Playgroud) 我为Android编写了一个原生UI组件,它基本上由一个自定义视图(RelativeLayout)组成,后者又包含JWPlayer.组件以及播放器本身都在我的RN项目中正确呈现(尺寸,颜色等具有正确的值)但是当我开始播放时,我得到没有任何图像的声音.
然而,当我旋转手机时,我也得到视频图像,一切似乎都运行正常.我在Android项目中尝试了类似的东西invalidate(),requestLayout()但没有任何改变.我还尝试render()在RN组件中再次调用(通过更新其状态),其中包含本机组件但仍然没有运气.我创建了一个原生Android项目,其中包含与我编写的完全相同的自定义RelativeLayout的Activity,一切正常.所以问题似乎是在React Native项目的一边.
由于旋转手机后一切正常,必须有一些生命周期方法重新渲染/重新布局RN组件.
所以我的问题是:有这样的方法吗?
首先十分感谢.
PS.JWPlayer基于ExoPlayer.
当 react native 多次需要这个原生 ui 组件时,从第二个开始,前一个变成黑色。
有任何想法吗?
@Override
public String getName()
{
return "JWPlayer";
}
@Override
public JWPlayerView createViewInstance(ThemedReactContext context)
{
PlayerConfig playerConfig = new PlayerConfig.Builder().build();
playerView = new JWPlayerView(context.getCurrentActivity(), playerConfig);
playerView.setFullscreen(false, false);
playerView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
playerView.addOnFullscreenListener(this);
playerView.addOnPauseListener(this);
playerView.addOnPlayListener(this);
playerView.addOnSetupErrorListener(this);
playerView.addOnErrorListener(this);
return playerView;
}
Run Code Online (Sandbox Code Playgroud)