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

Переходы на активность 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

Где проблема?

4b9b3361

Ответ 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 или ниже.