Как реализовать переход от родителя к потомку в соответствии с требованиями Material Design

Рекомендации Google по материальному дизайну предписывают следующий переход для переходов «родитель-потомок», когда родительский элемент состоит из списка. (Рекомендации по дизайну материалов)

Как сделать такой переход? Мне неизвестны какие-либо встроенные переходы, позволяющие это сделать.


person Raveesh Bhalla    schedule 01.12.2014    source источник


Ответы (4)


Привет, я думаю, что опаздываю на несколько недель, но я только что выпустил библиотеку для создания этого, вдохновленную Google Inbox: https://github.com/saket/InboxRecyclerView

person Saket    schedule 14.09.2018
comment
Рад иметь возможность отметить принятый ответ столько лет спустя - единственное решение, которое понимает и обрабатывает всю сложность перехода. - person Raveesh Bhalla; 14.09.2018

Один из вариантов - использовать ActivityOptionsCompat.makeScaleUpAnimation

Activity activity = getActivity();
Intent intent = new Intent(activity, OtherActivity.class);
Bundle options = ActivityOptionsCompat.makeScaleUpAnimation(
    sourceView, 0, 0, sourceView.getWidth(), sourceView.getHeight()).toBundle();

ActivityCompat.startActivity(activity, intent, options);

Это приведет к тому, что новое действие расширится по вертикали и горизонтали от вашего sourceView

person Stromata    schedule 02.05.2017
comment
Как это отменить, я имею в виду, как применять при нажатии кнопки возврата? - person Aditya; 12.05.2018
comment
А как регулировать скорость? - person Aditya; 12.05.2018

Начать действие с общим элементом

Чтобы создать анимацию перехода экрана между двумя действиями, имеющими общий элемент:

Включите переходы содержимого окон в вашей теме. Укажите переход общих элементов в своем стиле. Определите свой переход как ресурс XML. Назначьте общее имя общим элементам в обоих макетах с помощью атрибута android: transitionName. Используйте метод ActivityOptions.makeSceneTransitionAnimation ().

// get the element that receives the click event
final View imgContainerView = findViewById(R.id.img_container);

// get the common element for the transition in this activity
final View androidRobotView = findViewById(R.id.image_small);

// define a click listener
imgContainerView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, Activity2.class);
        // create the transition animation - the images in the layouts
        // of both activities are defined with android:transitionName="robot"
        ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot");
        // start the new activity
        startActivity(intent, options.toBundle());
    }
});

Для общих динамических представлений, которые вы создаете в своем коде, используйте метод View.setTransitionName (), чтобы указать общее имя элемента в обоих действиях.

Чтобы отменить анимацию перехода сцены после завершения второго действия, вызовите метод Activity.finishAfterTransition () вместо Activity.finish ().

Возьмите отсюда Настройте переходы между действиями

person Anton A.    schedule 02.12.2014

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

Intent intent = new Intent(MainActivity.this, NFCTagInformationActivity.class);
Bundle options = ActivityOptionsCompat.makeClipRevealAnimation(
            cvTagInfoSmall, 0, 0, cvTagInfoSmall.getWidth(), cvTagInfoSmall.getHeight()).toBundle();
ActivityCompat.startActivity(this, intent, options);

вы можете использовать makeScaleUpAnimation вместо makeClipRevealAnimation для другой анимации перехода между видами.

person Mehul Boghra    schedule 24.02.2020