Переходы на активность Android с поддержкой поддержки v4 с Android L
Я реализовал материальный дизайн для своего приложения. Я видел, что здесь можно совершать переходы между действиями: http://android-developers.blogspot.com.es/2014/10/implementing-material-design-in-your.html
Итак, я попытался следить за тем, что говорится в разделе "Аутентичное движение":
ActivityMain.java
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
albumCoverImageView, // The view which starts the transition
transitionName // The transitionName of the view we’re transitioning to
);
ActivityCompat.startActivity(activity, intent, options.toBundle());
activity_main.xml
<ImageView
…
android:transitionName="@string/transition_album_cover" />
activity_details.xml
<ImageView
…
android:transitionName="@string/transition_album_cover" />
Однако это, по-видимому, делает переход по активности Android по умолчанию, и я не вижу анимации.
Имейте в виду, что я вызвал requestWindowFeature (Window.FEATURE_CONTENT_TRANSITIONS), как он здесь говорит http://developer.android.com/reference/android/support/v4/app/ActivityOptionsCompat.html#makeSceneTransitionAnimation(android.app.Activity, android.view.View, java.lang.String)
Также все это было протестировано с помощью API-интерфейса Nexus4 API 19
Где проблема?
Ответы
Ответ 1
ActivityOptionsCompat.makeSceneTransitionAnimation
работает только на уровне api >= 21.
Из docs:
Некоторые материальные элементы дизайна, такие как материальная тема и пользовательские переходы активности доступны только на Android 5.0 (уровень API 21) и выше. Однако вы можете проектировать свои приложения, чтобы использовать эти при работе на устройствах, поддерживающих материальное проектирование и все еще совместимы с устройствами, использующими предыдущие версии Android.
Вот определение:
public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
View sharedElement, String sharedElementName) {
if (Build.VERSION.SDK_INT >= 21) {
return new ActivityOptionsCompat.ActivityOptionsImpl21(
ActivityOptionsCompat21.makeSceneTransitionAnimation(activity,
sharedElement, sharedElementName));
}
return new ActivityOptionsCompat();
}
Итак, почему этот метод существует в пакете поддержки?
Это делается для поддержания обратной совместимости со старыми версиями (api level <= 20). Из ведения документации по совместимости:
// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Call some material design APIs here
} else {
// Implement this feature without material design
}
Ответ 2
Переходы активности исключительно для Android 5.0. ActivityOptionsCompat. makeSceneTransitionAnimation
ничего не делает, если вы используете 19 или ниже.