Плавный переход изображения: как реализовать переход от кругового изображения к общему изображению ImageView

При разработке современных приложений плавные и визуально привлекательные переходы играют важную роль в улучшении пользовательского опыта. Одним из популярных эффектов перехода является переход от круглого изображения к общему изображению ImageView, при котором изображение расширяется от круглой формы до заполнения ImageView. В этой статье блога мы рассмотрим различные методы достижения этого эффекта при разработке под Android. Мы будем использовать разговорный язык и приведем примеры кода для объяснения каждого метода.

Метод 1: использование ActivityOptionsCompat
Класс ActivityOptionsCompat предоставляет удобный способ определения переходов общих элементов между действиями. Чтобы реализовать круговой переход от изображения к общему переходу ImageView, выполните следующие действия:

  1. В исходном действии определите ImageView круглой формы с нужным изображением.
  2. Создайте намерение для запуска целевого действия.
  3. Используйте метод ActivityOptionsCompat.makeSceneTransitionAnimation(), чтобы создать пакет анимации перехода.
  4. Передайте пакет анимации перехода в метод startActivity().

Пример кода:

// Source Activity
ImageView circularImage = findViewById(R.id.circular_image);
Intent intent = new Intent(this, TargetActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, circularImage, "shared_image");
startActivity(intent, options.toBundle());

Метод 2: использование SharedElementCallback
Класс SharedElementCallback позволяет настроить переход общего элемента между действиями. Чтобы реализовать циклический переход между изображением и общим переходом ImageView с помощью SharedElementCallback, выполните следующие действия:

  1. Реализуйте класс SharedElementCallback в исходных и целевых действиях.
  2. Переопределить метод onMapSharedElements() в исходном действии.
  3. В onMapSharedElements() сопоставьте круговое изображение с целевым ImageView.
  4. Переопределить методы onSharedElementStart() и onSharedElementEnd() в целевом действии.
  5. В onSharedElementStart() установите начальное состояние ImageView так, чтобы оно соответствовало круговому представлению изображения.
  6. В onSharedElementEnd() анимируйте ImageView до его конечного состояния.

Пример кода:

// Source Activity
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
    // Map the circular image view to the target ImageView
    sharedElements.put("shared_image", circularImage);
}
// Target Activity
@Override
public void onSharedElementStart(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
    // Set initial state of ImageView to match circular image view
    targetImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    targetImageView.setImageDrawable(circularImage.getDrawable());
}
@Override
public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
    // Animate ImageView to its final state
    targetImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
}

Метод 3: использование TransitionDrawable
TransitionDrawable — это рисуемый объект, который плавно переходит между двумя рисуемыми ресурсами. Чтобы добиться перехода круглого изображения в ImageView с помощью TransitionDrawable, выполните следующие действия:

  1. Создайте TransitionDrawable с двумя слоями: круглым изображением и прозрачным изображением.
  2. Установите TransitionDrawable в качестве фона ImageView.
  3. Используйте метод startTransition(), чтобы инициировать переход.

Пример кода:

// Create a TransitionDrawable with circular image and transparent image
Drawable[] layers = new Drawable[]{
        circularImage.getDrawable(),
        new ColorDrawable(Color.TRANSPARENT)
};
TransitionDrawable transitionDrawable = new TransitionDrawable(layers);
// Set the TransitionDrawable as the background of the ImageView
targetImageView.setBackground(transitionDrawable);
// Start the transition
transitionDrawable.startTransition(300); // Transition duration in milliseconds

Реализация перехода от круглого изображения к общему изображению ImageView может значительно повысить визуальную привлекательность вашего приложения для Android. В этой статье мы рассмотрели три различных метода достижения этого эффекта: использование ActivityOptionsCompat, SharedElementCallback и TransitionDrawable. Включив эти методы в свое приложение, вы сможете создавать плавные и привлекательные переходы, которые произведут неизгладимое впечатление на ваших пользователей.