Переключатель 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?
Ответы
Ответ 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/...