解决VideoPlayer视频层级无法放在Cocos渲染底层问题—Android篇
由于一些业务场景下,我们需要播放视频,但又不希望视频总是处于cocos顶层播放,我们还可能希望在视频上层做一些Cocos层的事情,因目前官方的组件不支持原生版本的置底操作。经本人查阅资料,找到适合于Cocos3.6方法。
文章参考2.x版本方案 VideoPlayer层级(置底)解决方案
第一步
- 开启cocos背景透明,由于我们希望在cocos下层依然显示一些东西,那么就需要把cocos背景设置为透明
- Cocos项目设置->宏配置->开启
ENABLE_TRANSPARENT_CANVAS - 设置Camera组件的ClearColor颜色alpha通道为0
第二步
-
修改CocosVideoHelper.java
位于:Creator\3.x.x\resources\resources\3d\engine\native\cocos\platform\android\java\src\com\cocos\lib
修改_createVideoView方法如下
private void _createVideoView(int index) { CocosVideoView videoView = new CocosVideoView(mActivity,index); sVideoViews.put(index, videoView); FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); //mLayout.addView(videoView, lParams); //videoView.setZOrderOnTop(true); mLayout.addView(videoView,0, lParams); videoView.setZOrderMediaOverlay(false); videoView.setZOrderOnTop(false); videoView.setVideoViewEventListener(videoEventListener); } -
修改CocosVideoView.java
位于:Creator\3.x.x\resources\resources\3d\engine\native\cocos\platform\android\java\src\com\cocos\lib
修改onTouchEvent方法如下
-
public boolean onTouchEvent(MotionEvent event) { if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) { this.sendEvent(EVENT_CLICKED); } return false; //return true; } -
在AppActivity中 onCreate方法中,增加如下代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // DO OTHER INITIALIZATION BELOW SDKWrapper.shared().init(this); if (mSurfaceView != null) { mSurfaceView.setZOrderMediaOverlay(true); mSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); mSurfaceView.setBackgroundColor(Color.TRANSPARENT); } }
第三步
- 运行测试
这个好像只能最底层 ,要么上层, 和引擎的渲染是分开的