Как да внедрите навигационния преход от родител към дете, както е предписано от 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