Подтвердить что ты не робот

Переключатель Activity/Fragment Transitions совместим с устройствами до Lollipop?

Я пытаюсь сделать переход активности с использованием общих элементов на устройстве pre-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?

4b9b3361

Ответ 1

Нет, Activity/Fragment Переходы невозможны на устройствах с предварительным Lollipop. В соответствии с документация:

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

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

См. также George Mount на fooobar.com/questions/109147/....

Ответ 2

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

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

https://github.com/albinmathew/PreLollipopTransition

Ответ 3

Хотя причудливые переходы Lollipop Activity/Fragment недоступны pre-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());

Ответ 4

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

Отправленный ранее в дубликат этого вопроса: fooobar.com/info/176616/...