Общий переход элемента между двумя разными приложениями в Android?

Есть ли возможность использовать общий переход элемента между двумя разными приложениями?


comment
Теоретически переходы с общими элементами должны работать, даже если два действия принадлежат разным приложениям. Очевидно, что два приложения должны будут координировать свои действия друг с другом, чтобы обеспечить правильную работу перехода (т. е. оба приложения должны будут установить один и тот же transitionName для общего элемента и т. д.). Вы проверяли это на себе?   -  person Alex Lockwood    schedule 03.11.2014
comment
@AlexLockwood Я не делал, но сделаю, так как никто другой не делал ;)   -  person pixel    schedule 03.11.2014


Ответы (1)


Да, общие элементы будут работать между разными приложениями. Вы должны согласовать общее имя для двух приложений. Обычно это делается с помощью transitionName, как предлагает @AlexLockwood, но представления не обязательно должны носить одно и то же имя. Просто случается, что если вы это сделаете, вы получите большую помощь бесплатно.

Существует важный аспект совместного использования элементов между приложениями — они должны быть в одной задаче. Параметры действия будут отклонены, если они не относятся к одной и той же задаче.

Если вы хотите использовать разные имена переходов в макете, вы просто делаете это:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
    this, view, "remoteName");
startActivity(intent, options.toBundle());

Теперь, если удаленное приложение использовало «remoteName» для имени перехода в своем файле макета, ему не нужно делать ничего особенного. Однако, если он использует другое имя, он должен сопоставить это имя с представлением:

setEnterSharedElementCallback(new SharedElementCallback() {
        @Override
        public void onMapSharedElements(List<String> names,
                Map<String, View> sharedElements) {
            // You may want to validate that names contains "remoteName"
            // if this can be instantiated with different shared elements
            sharedElements.put("remoteName", findViewById(R.id.mySharedElement));
        }
    });

Эта функциональность важна, когда вы делитесь чем-то, что имеет список представлений, любое из которых может быть общим. Например, в списке контактов все изображения контактов будут иметь разные имена переходов. Переходя от одного контакта к этому списку контактов, вам необходимо сопоставить один общий контакт с одним из контактов в списке.

person George Mount    schedule 03.11.2014
comment
Итак, теоретически возможно определить два разных ресурса перехода в разных приложениях? - person pixel; 14.11.2014
comment
Да. Он будет вести себя так же, как если бы вы использовали разные переходы для разных действий в одном и том же приложении. Выходной переход общего элемента работает с вызывающим действием и задерживает передачу общего элемента вызываемому действию до его завершения. Переход ввода общего элемента перемещает общий элемент (элементы) из начального положения в конечное положение. Выходной переход работает с вызывающей активностью и работает с уходящими представлениями. Действие ввода работает с вызываемым действием и влияет на ввод представлений. - person George Mount; 16.11.2014
comment
@GeorgeMount Вы упомянули, что параметры действия общего элемента будут отклонены, если вызывающее и вызываемое действия не относятся к одной и той же задаче. Верно ли это также для переходов контента выхода/входа, которые не имеют общих элементов? - person Alex Lockwood; 19.12.2014
comment
Да. Я полагаю, что нет необходимости отклонять переходы Activity без общих элементов, но в настоящее время они есть. Мы могли бы подумать об изменении этого в будущем. - person George Mount; 19.12.2014