android 8(26)视图Z索引的表现与< = 25

时间:2018-01-08 10:53:57

标签: android cordova comparable opentok

我已经搜索了好几天来解决这个问题的底部,并且作为一个java新手我无处可去......

以下代码演示了此问题。代码有效,但实际上不应该。

完整代码在https://github.com/martyzz1/cordova-plugin-opentok/blob/master/src/android/OpenTokAndroidPlugin.java

2(或更多,但在我们的情况下为2)视图是双向视频,其中订阅者视图是整页大小,而发布者是具有更高zindex的小缩略图,其出现在底部的订阅者视图上右手角落。代码在android< = 25上运行良好,但在android 8上,缩略图显示在下面(因此隐藏)。

我查看了android 8更改文档,但看不到任何看起来会解释差异的内容。例如切换视图列表的顺序使其工作。我还能够在运行时切换zindex值,并重绘窗口并且代码行为正确。例如将发布者的zindex降低到小于会话会隐藏缩略图并增加它显示缩略图。

我尝试过使用setZ,setElevation,bringtoFront,addView(mView,index)addView(mView,-1)而我只是想法了。有人可以帮忙吗?

public class CustomComparator implements Comparator<RunnableUpdateViews> {
        @Override
        public int compare(RunnableUpdateViews object1, RunnableUpdateViews object2) {
            if (android.os.Build.VERSION.SDK_INT > 25) {
                return object1.getZIndex() - object2.getZIndex();
            } else {
                return object2.getZIndex() - object1.getZIndex();
            }
        }
    }
public void updateZIndices() {
        allStreamViews = new ArrayList<RunnableUpdateViews>();
        for (Map.Entry<String, RunnableSubscriber> entry : subscriberCollection.entrySet()) {
            allStreamViews.add(entry.getValue());
        }
        if (myPublisher != null) {
            allStreamViews.add(myPublisher);
        }
        Collections.sort(allStreamViews, new CustomComparator());

        int index = 1;

        ViewGroup parent = (ViewGroup) cordova.getActivity().findViewById(android.R.id.content);
        for (RunnableUpdateViews viewContainer : allStreamViews) {
            if (null != parent) {
                //viewContainer.mView.bringToFront();
                //int  zind = viewContainer.getZIndex();
                //float zindF = zind;
                //this.mView.setElevation(zindF);

                parent.removeView(viewContainer.mView);
                parent.addView(viewContainer.mView);
                //index += 1;
            } else {
                Log.i(TAG, "parent was null");
            }
        }
        /*for (int i = 0; i < allStreamViews.size(); i++) {
            allStreamViews.get(i).mView.invalidate();
        }
        parent.invalidate();*/
    }

    public int getZIndex() {
        try {
            Log.i(TAG, "getZIndex " + mProperty.getString(0));
            return mProperty.getInt(5);
        } catch (Exception e) {
            Log.i(TAG, "getZIndex() exception" + e.toString());
            return 0;
        }
    }

2 个答案:

答案 0 :(得分:0)

不确定是否是这种情况。但是当我们添加了在webview后面加载凸轮的可能性时。我们发现目前所有凸轮都位于相同的视图和相同的Z位置。

使用TranslationZ它们处于不同的层次。请参阅下一个实施:https://github.com/Mediapioniers/cordova-plugin-opentok/tree/feat.cams_behind_webview_z-index?files=1

答案 1 :(得分:0)

setZOrderOnTopsetZOrderMediaOverlay实际上是改变SurfaceView s相对于彼此的顺序的唯一方法。有关详细信息,请参阅https://stackoverflow.com/a/22746240/468405