rendersliver 发表于 2016-7-31 20:15:51

surfaceview切换

同一个surfaceview,第一次是只在父布局A上显示,然后点击按钮切换到父布局B上显示。
我现在是第一次从A到B没问题,但是第二次先从A remove以后再add surfaceview到B上时显示不出来,怎么做呢?

佰锐科技-梁国桦 发表于 2016-8-1 09:33:43

本帖最后由 佰锐科技-梁国桦 于 2016-8-1 09:35 编辑

您好,我们有一个切换本地与远程视频的demo,切换的原理是本地视频和远程视频先与surfaceview解绑,然后再交换绑定,从而实现本地视频和远程视频在位置上的交换(改变),如果您需要该demo,可以留下邮件地址,我给您发

rendersliver 发表于 2016-8-1 09:55:08

佰锐科技-梁国桦 发表于 2016-8-1 09:33
您好,我们有一个切换本地与远程视频的demo,切换的原理是本地视频和远程视频先与surfaceview解绑,然后再 ...

现在已经实现了切换,但是surfaceview可以接受点击事件,却看不到它的图像,setZOrderOnTop(true)不起作用

佰锐科技-梁国桦 发表于 2016-8-1 11:34:21

rendersliver 发表于 2016-8-1 09:55
现在已经实现了切换,但是surfaceview可以接受点击事件,却看不到它的图像,setZOrderOnTop(true)不起作 ...

1)是已经有我们的切换远程本地视频的demo了吗?有的话,建议参考我们的demo
2)看不到图像是哪个surfaceview看不到?切换前还是切换后?

rendersliver 发表于 2016-8-1 11:39:37

佰锐科技-梁国桦 发表于 2016-8-1 11:34
1)是已经有我们的切换远程本地视频的demo了吗?有的话,建议参考我们的demo
2)看不到图像是哪个surfac ...

切换后小窗口看不到了,但是在那个区域点一下发现显示出来了

佰锐科技-梁国桦 发表于 2016-8-1 13:53:53

rendersliver 发表于 2016-8-1 11:39
切换后小窗口看不到了,但是在那个区域点一下发现显示出来了

您的意思是:远程视频切换到小窗口时,小窗口看不见,再切换回来时就有了 ?
如果是这样,可能是漏了一次setZOrderOnTop(true); 要注意看清楚是哪个surfaceview需要调用这个噢,两个情况都不同的

佰锐科技-梁国桦 发表于 2016-8-1 14:18:08

rendersliver 发表于 2016-8-1 11:39
切换后小窗口看不到了,但是在那个区域点一下发现显示出来了

如果没漏的话,建议您检查下代码的顺序有没有问题,也可以直接复制我们demo的代码, 然后修改下对应的控件修改下变量名即可

rendersliver 发表于 2016-8-6 21:06:04

佰锐科技-梁国桦 发表于 2016-8-1 14:18
如果没漏的话,建议您检查下代码的顺序有没有问题,也可以直接复制我们demo的代码, 然后修改下对应的控 ...

两个窗口都设置了确实都显示出来了,但是setZOrderOnTop这个不能用啊,会导致我大窗口上其他控件都看不见了

佰锐科技-梁国桦 发表于 2016-8-8 09:09:17

        /** 用来切换的标识 */
        private int tag = 0;
      /** 此方法会交换两个位置的信息 */
        private void changeSize() {
                if (tag == 0) {
                        // 先取消绑定别人的画面
                        anychatSDK.mVideoHelper.UnBindVideo(index);
                        // 移出别人的画面
                        rlContainer.removeView(mOtherView);

                        mMyView.setLayoutParams(paramsBig);

                        mOtherView.setLayoutParams(paramsSmall);
                        mOtherView.setZOrderOnTop(true);

                        rlContainer.addView(mOtherView);

                        // 绑定别人的画面
                        index = anychatSDK.mVideoHelper.bindVideo(mOtherView.getHolder());
                        anychatSDK.mVideoHelper.SetVideoUser(index, userID);

                        tag = 1;
                } else {
                        // 先取消绑定别人的画面
                        anychatSDK.mVideoHelper.UnBindVideo(index);
                        // 移出别的画面
                        rlContainer.removeView(mOtherView);

                        mMyView.setLayoutParams(paramsSmall);

                        mOtherView.setLayoutParams(paramsBig);
                        rlContainer.addView(mOtherView, -1);

                        mOtherView.setZOrderOnTop(false);
                        mOtherView.setZOrderMediaOverlay(false);
                        mMyView.setZOrderMediaOverlay(true);
                        mMyView.setZOrderOnTop(true);

                        // 绑定别人的画面
                        index = anychatSDK.mVideoHelper.bindVideo(mOtherView.getHolder());
                        anychatSDK.mVideoHelper.SetVideoUser(index, userID);

                        tag = 0;
                }
        }

您看看调用的顺序对吗?

rendersliver 发表于 2016-8-22 14:16:23

谢谢耐心的解答。
最后曲折的解决问题了,没有使用setZOrderOnTop这个属性,使用addview和removeview实现了。
页: [1] 2
查看完整版本: surfaceview切换