Переход общего элемента с помощью операции "Диалог"

Я собрал очень простое приложение, которое использует общие переходы элементов при запуске действия с помощью темы "Диалог" (исходный код на github).

Я получил следующий результат:

sample app

Как вы видите, есть две проблемы с переходом/анимацией:

  • Анимация видна только в области активности диалога, поэтому она зажимается и выглядит уродливой.
  • Отсутствует переход/анимация, когда я выхожу за пределы действия вернуться.

Как я могу исправить эти проблемы? Любая помощь будет оценена.

EDIT: После ответа Quanturium я сделал следующие действия, чтобы заставить его работать:

Используйте следующую тему вместо темы "Диалог":

<style name="AppTheme.Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

Используйте CardView в качестве фона для отображения диалога и для закругленных углов и теней.

Вызов завершенAfterTransition(); когда пользователь выходит за пределы CardView.

Теперь он выглядит так (code), CardView нуждается в уточнении, чтобы лучше соответствовать диалогу, но он работает как минимум.:

working

Ответ 1

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

В вашем случае вы используете android: theme = "@style/Theme.AppCompat.Dialog", который означает, что размер второй области рисования активности меньше, чем размер первого действия. Это объясняет отсечение и отсутствие перехода при нажатии снаружи.

Что вы хотите сделать, так это избавиться от этой темы и реализовать свой собственный макет с темным фоном/тенью, чтобы можно было выполнить плавный переход.