Совместимы ли переходы активности/фрагмента с устройствами до Lollipop?

Я пытаюсь сделать переход активности с помощью общих элементов на устройстве до Lollipop (4.x). Является ли это возможным? Пока что пробую так:

public class RewardDetail extends ActionBarActivity {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        ...

        ViewCompat.setTransitionName(imageView, TRANSITION_NAME);
    }

    ...

    public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) {
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME);
        Intent intent = new Intent(activity, RewardDetail.class);
        intent.putExtra(PARAM_DATA, detailData);
        ActivityCompat.startActivity(activity, intent, options.toBundle());
    }
}

вызвано:

@Override
public void onClick(final View v) {
    int position = recyclerView.getChildPosition(v);
    WelcomeReward welcomeReward = data.get(position);
    RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward);
}

Но это приводит к «обычному» переходу (без общего элемента). Любые идеи?

ИЗМЕНИТЬ

Судя по этому видео, это можно сделать:

https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL

Есть ли библиотека, уже реализующая это для pre Lollipop?


person Cheborra    schedule 25.10.2014    source источник
comment
Если вы ищете способ сделать это в pre-Lollipop, вы можете использовать это видео в качестве примера: youtube.com/watch?v=CPxkoe2MraA (обратите внимание, что для его реализации требуется гораздо больше работы).   -  person Alex Lockwood    schedule 18.11.2014
comment
В библиотеке поддержки 24.2.0 появилось многообещающее обновление — developer.android.com/topic/libraries/support-library/ с пакетом android.support.transition, но это бэкпортированные API только для уровня просмотра!   -  person Oleksandr    schedule 25.08.2016


Ответы (4)


Нет, переходы активности/фрагмента невозможны на устройствах до Lollipop. Согласно документация:

Запустите действие с дополнительной информацией о запуске, если это возможно.

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

См. также ответ Джорджа Маунта на этот вопрос StackOverflow.

person Alex Lockwood    schedule 26.10.2014
comment
Итак... если переходы активности/фрагмента возможны только в Lollipop, означает ли это, что некоторые приложения Google используют более сложные подходы (как вы указали в комментарии к вопросу) для достижения перехода? Мне очень любопытно, как календарь Google и Keep работают в более низких версиях. - person Qianqian; 10.12.2014
comment
Календарь Google и Google Keep, вероятно, реализовали свои собственные библиотеки для этого... нет официального API, поддерживающего устройства до Lollipop. - person Alex Lockwood; 10.12.2014
comment
@Qianqian Конечно, невозможно добиться чего-то похожего на переходы фрагментов в предыдущих версиях платформ ... в конце концов, фрагменты - это просто View контейнеры. Но реализация такой функции может потребовать переработки основных частей вашего приложения. С другой стороны, невозможно реализовать переходы Activity на предыдущих версиях платформы, так как они зависят от Render Thread, который был добавлен во фреймворк в Lollipop. - person Alex Lockwood; 11.12.2014
comment
@AlexLockwood, судя по вашей цитате, анимация запуска активности должна быть возможна в Android 4.1+. - person Price; 12.03.2015
comment
Вы можете попробовать реализовать что-то самостоятельно, но у Google нет обратно совместимых библиотек. - person Alex Lockwood; 12.03.2015
comment
@AlexLockwood мое приложение отлично работает в Lollipop, но, похоже, оно дает сбой в версиях до леденцов. Это связано или приложение должно по крайней мере работать без переходов на устройствах до леденцов. В журнале ошибок отображается android.content.res.Resources$NotFoundException: идентификатор ресурса #0x10c000d. - person Sagar Devanga; 22.04.2015
comment
Приложение выйдет из строя, если вы попытаетесь использовать эти API до леденца. - person Alex Lockwood; 22.04.2015
comment
Эта ссылка в вашем сообщении была заменена по следующей причине: занести в черный список использование распространенных сокращателей ссылок в сообщениях. - person Tom; 30.05.2019
comment
Это обсуждается в мета - person Amir A. Shabani; 30.05.2019

Вы можете проверить эту библиотеку для переходов активности и фрагментов для устройств pre lollipop.

dependencies {
        compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}

https://github.com/albinmathew/PreLollipopTransition

person Albin Mathew    schedule 28.05.2015

Хотя причудливые переходы Lollipop Activity/Fragment недоступны до Lollipop (без использования сторонней библиотеки), вы все равно можете переопределить анимацию, используемую для перехода между действиями.

Непосредственно перед/после того, как вы начнете вызывать startActivity(), вы можете сделать вызов [Activity.overridePendingTransition](http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, int)). Когда вы покидаете свою активность, вызывайте тот же метод.

Точно так же вы можете использовать ActivityOptionsCompat, чтобы определить пользовательскую анимацию для использования во время перехода.

ActivityOptionsCompat opts =
    ActivityOptionsCompat.makeCustomAnimation(getActivity(), R.anim.in, R.anim.out);
startActivity(intent, opts.toBundle());
person Dave Jensen    schedule 17.11.2015

Есть библиотека поддержки, но она не поддерживает (все) переходы на версиях Android ниже 5.0. Однако есть несколько альтернатив:

Неофициальные библиотеки совместимости
https://github.com/andkulikov/transitions-everywhere
https://github.com/takahirom/PreLollipopTransition
https://github.com/lgvalle/Material-Animations

Android KitKat
http://www.doubleencore.com/2013/11/new-transitions-framework/ и образец в папке примеров SDK.

Опубликовано ранее в дубликате этого вопроса здесь: https://stackoverflow.com/a/27344471/1683141

person Mdlc    schedule 29.01.2016