31

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

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); 
} 

Но это приводит к «обычной» перехода (не общий элемент). Есть идеи?

EDIT

Согласно этому видео, это может быть сделано:

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

Есть библиотека уже реализует это для предварительного леденец?

+2

Если вы ищете способ сделать это в предварительном леденце, вы можете использовать это видео в качестве примера: https: // WWW. youtube.com/watch?v=CPxkoe2MraA (обратите внимание, что для этого требуется гораздо больше работы для реализации). –

+0

В библиотеке поддержки было многообещающее обновление 24.2.0 - https://developer.android.com/topic/libraries/support-library/revisions.html#24-2-0-api-updates с android.support.transition пакет, но он поддерживает API-интерфейсы Backported только для уровня View! – Oleksandr

ответ

16

No, Activity/Fragment Переходы невозможны на устройствах с предварительным охлаждением. Согласно documentation:

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

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

См. Также ответ Джорджа Гора на номер this StackOverflow question.

+0

Итак ... если переходы активности/фрагмента возможны только в Lollipop, означает ли это, что некоторые приложения Google используют более сложные подходы (как вы указали в комментарии вопроса) для достижения перехода? Мне действительно интересно, как календарь Google и Keep работают в более низких версиях. – Qianqian

+0

Google Calendar и Google Keep, вероятно, внедрили свои собственные собственные библиотеки для этого ... нет официального API, который поддерживает устройства pre-Lollipop. –

+0

спасибо, @Alex Lockwood. Думаю, моя путаница теперь очищается. – Qianqian

8

Вы можете проверить эту библиотеку для деятельности и осколочных переходов для предварительных устройств леденца

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

https://github.com/albinmathew/PreLollipopTransition

2

Хотя фантазии Lollipop деятельности/Фрагмент переходы не доступны до 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()); 
2

Существует поддержка библиотеки, но она не поддерживает (все) переходы на 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

Смежные вопросы