Android Studio: Анимация перехода между экранами

Создание обработчика событий

Для обработки нажатия на каждый товар используем адаптер. В методе onBindViewHolder класса КурсАдаптер, присваивающем значения элементам дизайна, устанавливаем обработчик событий:

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Код, срабатывающий при нажатии на товар
    }
});

holder.itemView – элемент товара в списке.

Переход на новую страницу и передача данных

В обработчике создаём объект Intent для перехода на страницу КурсPage:

Intent intent = new Intent(context, КурсPage.class);
context.startActivity(intent);

context – объект адаптера. Передаём данные методом putExtra:

intent.putExtra("курсBg", цветКарточки);
intent.putExtra("курсImg", курсImg);
intent.putExtra("курсTitle", курсTitle);
intent.putExtra("курсDate", курсDate);
intent.putExtra("курсLevel", курсLevel);
intent.putExtra("курсТекст", курсТекст);

курсBg, курсImg, курсTitle, курсDate, курсLevel, курсТекст – ключи; соответствующие переменные – значения. В модель Курс нужно добавить метод getТекст(), для чего потребуется добавить поле текст, конструктор, геттер и сеттер. При создании объектов Курс в MainActivity необходимо передать значение для поля текст (в примере используется «тест»).

Приём данных на новой странице

В КурсPage создаём переменные для доступа к элементам дизайна:

ConstraintLayout курсBg = findViewById(R.id.курсBg);
ImageView курсImg = findViewById(R.id.курсImg);
TextView курсTitle = findViewById(R.id.курсTitle);
TextView курсDate = findViewById(R.id.курсDate);
TextView курсLevel = findViewById(R.id.курсLevel);
TextView курсТекст = findViewById(R.id.курсТекст);

Получаем переданные данные методом getIntent().getExtras():

int курсBgColor = getIntent().getIntExtra("курсBg", 0);
int курсImgRes = getIntent().getIntExtra("курсImg", 0);
String курсTitleStr = getIntent().getStringExtra("курсTitle");
String курсDateStr = getIntent().getStringExtra("курсDate");
String курсLevelStr = getIntent().getStringExtra("курсLevel");
String курсТекстStr = getIntent().getStringExtra("курсТекст");

курсBg.setBackgroundColor(курсBgColor);
курсImg.setImageResource(курсImgRes);
курсTitle.setText(курсTitleStr);
курсDate.setText(курсDateStr);
курсLevel.setText(курсLevelStr);
курсТекст.setText(курсТекстStr);

Используем getIntExtra для целых чисел и getStringExtra для строк. Для чисел указано значение по умолчанию.

Улучшение дизайна

Для удаления теней и обводки, а также корректировки отступов, используем атрибуты cardElevation и layout_marginTop в XML-разметке (КурсPage):

<androidx.cardview.widget.CardView
    ...
    app_cardElevation="0dp"
    ... >
    <TextView
        ...
        android_layout_marginTop="10dp"
        ... />
</androidx.cardview.widget.CardView>

Анимация перехода

Для анимации перехода добавляем в AndroidManifest.xml атрибут android_windowActivityTransitions="true". Минимальная версия SDK должна быть 21 или выше (устанавливается в build.gradle).

В КурсАдаптер создаём объект ActivityOptions и устанавливаем анимацию:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
    (Activity) context,
    Pair.create(holder.курсImg, "курсImg"),
    intent
);
context.startActivity(intent, options.toBundle());

В XML-разметках обоих Activity (КурсItem и КурсPage) для анимируемого изображения необходимо задать атрибут android_transitionName="курсImg".

Реализован переход между страницами с передачей данных и анимацией перехода изображения. Дизайн может быть дополнительно улучшен.

Что будем искать? Например,программа