Я искал много дней, чтобы разобраться в этой проблеме, и, будучи немного новичком в 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;
}
}