Android studio анимация появления layout

Содержание
  1. Анимация преобразований
  2. Создание анимации в XML-файле
  3. Атрибуты анимации
  4. Элемент
  5. Элемент Постепенно изменяющаяся анимация прозрачности при помощи AlphaAnimation. Поддерживает следующие атрибуты: fromAlpha — начальное значение прозрачности объекта; toAlpha — конечное значение прозрачности объекта; Атрибуты содержат значение прозрачности от 0 до 1 типа Float, где 0 означает полную прозрачность объекта. Элемент Элемент управляет анимацией изменения размеров объекта и представляет класс ScaleAnimation. Вы можете определить центральную точку изображения (закрепить центр анимации изображения), относительно которой будет изменяться масштабирование объекта. Элемент поддерживает следующие атрибуты: fromxScale — начальный масштаб по X. Допустимы значения от 0 до 1 типа Float toxScale — конечный масштаб по X. Допустимы значения от 0 до 1 типа Float fromYScale — начальный масштаб по Y. Допустимы значения от 0 до 1 типа Float toYScale — конечный масштаб по Y. Допустимы значения от 0 до 1 типа Float pivotX — Х-координата закрепленного центра. Описывает центральную точку масштабирования в процентах от ширины от 0% до 100% pivotY — Y-координата закреплённого центра. Описывает центральную точку масштабирования в процентах от высоты от 0% до 100% Элемент Элемент создаёт вертикальную или горизонтальную анимацию движения. Представляет класс TranslateAnimation и поддерживает следующие атрибуты: fromXDelta — начальное положение по X toXDelta — конечное положение по X fromYDelta — начальное положение по Y toYDelta — конечное положение по Y Атрибуты должны быть в любом из следующих трёх форматов: Абсолютное значение Значения в процентах от -100% до 100% Значения в процентах от -100%p до 100%p, где p указывает процент относительно его родителя. Слайд-шоу Например, для эффекта слайд-шоу, когда один элемент выталкивает полностью другой элемент, реализуется двумя анимациями справо-налево или слева-направо. Элемент Элемент предназначен для анимации вращения и представляет класс RotateAnimation. Поддерживает следующие атрибуты: fromDegrees — начальный угол вращения в градусах toDegrees — конечный угол вращения в градусах pivotX — координата X центра вращения в пикселах; pivotY — координата Y центра вращения в пикселах Примеры с анимацией преобразований Можно создать несколько файлов анимации и применять их для одного объекта. Рассмотрим работу анимации на примере прямоугольника. К сожалению, у меня не заработал пример с изменением прозрачности (alpha), может вам повезет больше. (Как рассказал один из читателей, пример работает на эмуляторе 2.1, а на эмуляторе 2.3.3 уже нет). Создайте новый проект и в каталоге res/anim/ проекта создайте пять файлов с XML-анимацией: alpha.xml, rotate.xml, scale.xml, translate.xml и файл combination.xml, в котором мы будем использовать комбинацию различных объектов для создания смешанной анимации. alpha.xml rotate.xml scale.xml translate.xml combination.xml shape.xml Фигуру прямоугольника для анимации определим в файле shape.xml, который будет находиться в каталоге res/drawable. Разметка Перейдем к разметке основной формы приложения (main.xml). Поместим элемент ImageView: Анимация Анимация запускается в коде следующим образом: надо создать объект Animation через вызов метода AnimationUtils.loadAnimation() и передать ему в качестве параметра контекст активности и ссылку на XML-файл анимации. Затем запускается анимация через метод View.startAnimation(), передавая в него объект Animation: AnimationListener В классе Animation есть интерфейс AnimationListener. Интерфейс AnimationListener позволяет создать обработчик событий, который срабатывает в начале или при завершении анимации. Используя его, вы можете совершать какие-либо операции, прежде чем (или после того как) анимация закончит работу. Это может быть изменение содержимого представления или последовательный показ нескольких анимаций. У интерфейса AnimationListener есть три метода обратного вызова: onAnimationEnd() onAnimationRepeat() onAnimationStart() В этих методах можно реализовать код обработки события запуска, окончания и перезапуска анимации. Например, при окончании анимации можно сделать объект анимации невидимым, а при запуске снова отобразить на экране: Вызовите метод setAnimationListener() из объекта Animation и передайте ему в качестве параметра реализацию интерфейса AnimationListener, при необходимости переопределив методы onAnimationEnd(), onAnimationStart() и onAnimationRepeat(). В основном классе создадим меню из пяти пунктов, соответствующих каждому типу запускаемой анимации: Alpha, Scale, Translate, Rotate и Комбинация. В качестве идентификаторов пунктов меню используем идентификаторы ресурсов XML-файлов анимации, упростив тем самым структуру метода onOptionsitemSeiected(), вызываемого при выборе пункта меню. Анимация графических файлов Анимация для графических файлов ничем особым не отличается от анимации для графических фигур. Рассмотрим на примере анимацию графического объекта, отображаемого в ImageView. Создайте новый проект и найдите какой-нибудь графический файл с изображением кота (но не собаки, иначе работать не будет!). В XML-файле анимации создадим следующую структуру: используем элемент для растягивания изображения и вложенный контейнер , в котором определим два дочерних элемента и для одновременного вращения и изменения размеров объекта. Данный файл необходимо сохраним в каталоге res/anim/ под любым именем, например, crazycat.xml crazycat.xml В файле разметки поместим кнопку для запуска анимации и один элемент ImageView для нашего изображения. Осталось написать программный код: При нажатии кнопки изображение кота сначала плавно растянется по горизонтали, затем одновременно повернется и уменьшится в размерах, после чего вернется в исходное состояние. Независимо оттого, как анимация изменяет размеры объекта или перемещает его на плоскости, границы элемента View, в который загружено изображение, останутся неизменными: ваша анимация не будет автоматически корректировать размеры представления для размещения объекта. Если анимация выйдет за границы родительского представления, произойдет отсечение объекта анимации. Анимация группы представлений Анимацию можно сделать и для нескольких представлений, объединив их в группу. Например, поместив представления в контейнер LinearLayout, причем можно использовать не только графические, но и текстовые представления. Принцип анимаци останется тем же. В файле разметки приложения разместите дочерний контейнер LinearLayout, в котором разместите ImageView с изображением и TextView с надписью. Для дочернего контейнера обязательно присвойте идентификатор, по которому вы сможете загрузить его в код программы и использовать для анимации. Код класса практически не будет отличаться от предыдущего примера, за исключением того, что мы работаем с анимацией не отдельного представления, а с анимацией группы представлений: Источник LayoutAnimation — Анимация разметки и групп компонентов Класс LayoutAnimation нужен для применения анимации к группам представлений: передает одиночный объект Animation (или AnimationSet) для каждого дочернего компонента в заранее определенной последовательности. Используйте объект LayoutAnimationController для задания объекта Animation (или AnimationSet), который применяется к каждому компоненту в группе. Ко всем компонентам, содержащим этот объект, будет применена одна и та же анимация, но вы можете задействовать LayoutAnimationController для указания порядка и времени запуска для каждого компонента. Для этих целей в Android предусмотрено два класса: LayoutAnimationController — позволяет выбирать начальный сдвиг для каждого компонента (в миллисекундах) и порядок (нормальный, обратный или случайный), в каком анимация применится для каждого дочернего элемента; GridLayoutAnimationController — как производный класс назначает анимационную последовательность для дочерних компонентов с использованием ссылки на строки и столбцы; Создание анимации для разметки Чтобы создать новую анимацию для разметки, нужно определить её для каждого дочернего компонента. После создайте новый элемент LayoutAnimation (либо в коде программы, либо в виде внешнего ресурса), ссылающийся на ранее выполненную анимацию и описывающий порядок и время срабатывания, с которыми её необходимо применить. Создадим простую анимацию в файле popin.xml в каталоге res/anim popin.xml А также зададим описание LayoutAnimation в файле popinlayout.xml в той же папке. Элемент LayoutAnimation в случайном порядке применит всплывающую анимацию к каждому дочернему представлению заданной группы. popinlayout.xml Теперь можно применить созданную анимацию к группе представлений двумя способами — с помощью XML-ресурса или программно. В XML это делается при помощи атрибута android:layoutAnimation у разметки: Чтобы применить анимацию для разметки в коде программы, вызовите метод setLayoutAnimation() из объекта ViewGroup, передавая ему ссылку на соответствующий экземпляр LayoutAnimation. В обоих случаях анимация выполнится один раз, при первом появлении группы представлений. Вы можете вызвать её повторно, запустив метод scheduleLayoutAnimation() из объекта ViewGroup. Таким образом, анимация выполнится при следующем появлении группы представлений. Анимация для разметки также имеет поддержку интерфейса AnimationListener. В следующем листинге показан повторный запуск анимации в контексте группы представлений с помощью интерфейса AnimationListener, который используется для выполнения дополнительных действий по завершении изначальной анимации. Создание анимации для Splash-экрана Ссылка на исходный код приведена в конце статьи Одним из примеров, где можно использовать анимационные эффекты — это экран-заставка игры, которая появляется на несколько секунд, а затем исчезает, уступая место другому экрану-меню. Если на таком экране-заставке вывести просто текст о названии и версии игры, а также логотип, то будет скучно. Мы пойдем по другому пути и сделаем следующее: Поместим на форму TextView для отображения верхней текстовой строки Далее разместим контейнер TableLayout с двумя строками и столбцами — получается четыре ячейки В каждой ячейке разместим элемент ImageView Снова размещаем TextView с другой текстовой информацией И снова размещаем TextView, где будет содержаться информация о версии программы Далее добавляем ресурсы в проект: картинки (res/drawable), цвета для текстовой информации (colors.xml), размеры для шрифтов (dimens.xml). В итоге мы получим следующий результат Создание анимации Будем использовать анимацию преобразований. Создаем папку res/anim, в котором создадим три новых файла fade_in.xml, fade_in2.xml и custom_anim.xml. В первом файле анимация плавно увеличивает непрозрачность (альфа-канал) верхнего текста от значения 0 (прозрачный) до значения 1 (непрозрачный) в течение 2.5 секунд. Во втором файле происходит тоже самое, только добавлен еще один атрибут startOffset. Это означает, что сначала будет задержка в течение 2.5 секунд, а только потом произойдёт анимация с такой же продолжительностью. Её мы применим к нижнему тексту. Получается, что сначала произойдет анимация верхнего текста, а потом анимация нижнего текста. Третья анимация самая интересная. Она будет вращать картинки вокруг своей оси (rotate), а также менять их прозрачность (alpha). Причём вращаться они будут парами. Сначала будут вращаться левые две картинки, а затем — правые. Кроме вращения и изменения прозрачности, также будут меняться их размеры (scale). Управление анимации происходит программным путём. Чтобы применить первую анимацию к верхнему тексту, нужно получить экземпляр элемента TextView в методе onCreate(), загрузить анимационный ресурс в объект Animation и вызвать метод startAnimation() элемента TextView. Аналогично поступаем и со вторым текстовым элементом. Чтобы остановить анимацию, например, в методе onPause(), нужно вызвать метод clearAnimation(). Анимация всех элементов в элементе-контейнере Помимо возможности применения анимации к отдельным элементам, вы можете применить анимацию к каждому элементу View, содержащему в элементе-контейнере (например, TableLayout и к каждому элементу TableRow), используя класс LayoutAnimationController. В этом случае нужно загрузить соответствующую анимацию, создать экземпляр класса LayoutAnimationCotroller, произвести необходимые настройки этого экземпляра и затем вызвать метод setLayoutAnimation() элемента-контейнера. В данном случае нет необходимости вызывать метод startAnimation(), поскольку это сделает экземпляр класса LayoutAnimationController. При использовании данного подхода анимация применяется к каждому дочернему элементу, однако воспроизведение каждой анимации начинается в разное время. Это создает красивый эффект, когда каждый элемент поочередно делает оборот вокруг своего центра. Если после второй строчки вставить метод setOrder(), то анимация пар картинок будет происходить в случайном порядке: Источник
  6. Элемент
  7. Элемент Элемент создаёт вертикальную или горизонтальную анимацию движения. Представляет класс TranslateAnimation и поддерживает следующие атрибуты: fromXDelta — начальное положение по X toXDelta — конечное положение по X fromYDelta — начальное положение по Y toYDelta — конечное положение по Y Атрибуты должны быть в любом из следующих трёх форматов: Абсолютное значение Значения в процентах от -100% до 100% Значения в процентах от -100%p до 100%p, где p указывает процент относительно его родителя. Слайд-шоу Например, для эффекта слайд-шоу, когда один элемент выталкивает полностью другой элемент, реализуется двумя анимациями справо-налево или слева-направо. Элемент Элемент предназначен для анимации вращения и представляет класс RotateAnimation. Поддерживает следующие атрибуты: fromDegrees — начальный угол вращения в градусах toDegrees — конечный угол вращения в градусах pivotX — координата X центра вращения в пикселах; pivotY — координата Y центра вращения в пикселах Примеры с анимацией преобразований Можно создать несколько файлов анимации и применять их для одного объекта. Рассмотрим работу анимации на примере прямоугольника. К сожалению, у меня не заработал пример с изменением прозрачности (alpha), может вам повезет больше. (Как рассказал один из читателей, пример работает на эмуляторе 2.1, а на эмуляторе 2.3.3 уже нет). Создайте новый проект и в каталоге res/anim/ проекта создайте пять файлов с XML-анимацией: alpha.xml, rotate.xml, scale.xml, translate.xml и файл combination.xml, в котором мы будем использовать комбинацию различных объектов для создания смешанной анимации. alpha.xml rotate.xml scale.xml translate.xml combination.xml shape.xml Фигуру прямоугольника для анимации определим в файле shape.xml, который будет находиться в каталоге res/drawable. Разметка Перейдем к разметке основной формы приложения (main.xml). Поместим элемент ImageView: Анимация Анимация запускается в коде следующим образом: надо создать объект Animation через вызов метода AnimationUtils.loadAnimation() и передать ему в качестве параметра контекст активности и ссылку на XML-файл анимации. Затем запускается анимация через метод View.startAnimation(), передавая в него объект Animation: AnimationListener В классе Animation есть интерфейс AnimationListener. Интерфейс AnimationListener позволяет создать обработчик событий, который срабатывает в начале или при завершении анимации. Используя его, вы можете совершать какие-либо операции, прежде чем (или после того как) анимация закончит работу. Это может быть изменение содержимого представления или последовательный показ нескольких анимаций. У интерфейса AnimationListener есть три метода обратного вызова: onAnimationEnd() onAnimationRepeat() onAnimationStart() В этих методах можно реализовать код обработки события запуска, окончания и перезапуска анимации. Например, при окончании анимации можно сделать объект анимации невидимым, а при запуске снова отобразить на экране: Вызовите метод setAnimationListener() из объекта Animation и передайте ему в качестве параметра реализацию интерфейса AnimationListener, при необходимости переопределив методы onAnimationEnd(), onAnimationStart() и onAnimationRepeat(). В основном классе создадим меню из пяти пунктов, соответствующих каждому типу запускаемой анимации: Alpha, Scale, Translate, Rotate и Комбинация. В качестве идентификаторов пунктов меню используем идентификаторы ресурсов XML-файлов анимации, упростив тем самым структуру метода onOptionsitemSeiected(), вызываемого при выборе пункта меню. Анимация графических файлов Анимация для графических файлов ничем особым не отличается от анимации для графических фигур. Рассмотрим на примере анимацию графического объекта, отображаемого в ImageView. Создайте новый проект и найдите какой-нибудь графический файл с изображением кота (но не собаки, иначе работать не будет!). В XML-файле анимации создадим следующую структуру: используем элемент для растягивания изображения и вложенный контейнер , в котором определим два дочерних элемента и для одновременного вращения и изменения размеров объекта. Данный файл необходимо сохраним в каталоге res/anim/ под любым именем, например, crazycat.xml crazycat.xml В файле разметки поместим кнопку для запуска анимации и один элемент ImageView для нашего изображения. Осталось написать программный код: При нажатии кнопки изображение кота сначала плавно растянется по горизонтали, затем одновременно повернется и уменьшится в размерах, после чего вернется в исходное состояние. Независимо оттого, как анимация изменяет размеры объекта или перемещает его на плоскости, границы элемента View, в который загружено изображение, останутся неизменными: ваша анимация не будет автоматически корректировать размеры представления для размещения объекта. Если анимация выйдет за границы родительского представления, произойдет отсечение объекта анимации. Анимация группы представлений Анимацию можно сделать и для нескольких представлений, объединив их в группу. Например, поместив представления в контейнер LinearLayout, причем можно использовать не только графические, но и текстовые представления. Принцип анимаци останется тем же. В файле разметки приложения разместите дочерний контейнер LinearLayout, в котором разместите ImageView с изображением и TextView с надписью. Для дочернего контейнера обязательно присвойте идентификатор, по которому вы сможете загрузить его в код программы и использовать для анимации. Код класса практически не будет отличаться от предыдущего примера, за исключением того, что мы работаем с анимацией не отдельного представления, а с анимацией группы представлений: Источник LayoutAnimation — Анимация разметки и групп компонентов Класс LayoutAnimation нужен для применения анимации к группам представлений: передает одиночный объект Animation (или AnimationSet) для каждого дочернего компонента в заранее определенной последовательности. Используйте объект LayoutAnimationController для задания объекта Animation (или AnimationSet), который применяется к каждому компоненту в группе. Ко всем компонентам, содержащим этот объект, будет применена одна и та же анимация, но вы можете задействовать LayoutAnimationController для указания порядка и времени запуска для каждого компонента. Для этих целей в Android предусмотрено два класса: LayoutAnimationController — позволяет выбирать начальный сдвиг для каждого компонента (в миллисекундах) и порядок (нормальный, обратный или случайный), в каком анимация применится для каждого дочернего элемента; GridLayoutAnimationController — как производный класс назначает анимационную последовательность для дочерних компонентов с использованием ссылки на строки и столбцы; Создание анимации для разметки Чтобы создать новую анимацию для разметки, нужно определить её для каждого дочернего компонента. После создайте новый элемент LayoutAnimation (либо в коде программы, либо в виде внешнего ресурса), ссылающийся на ранее выполненную анимацию и описывающий порядок и время срабатывания, с которыми её необходимо применить. Создадим простую анимацию в файле popin.xml в каталоге res/anim popin.xml А также зададим описание LayoutAnimation в файле popinlayout.xml в той же папке. Элемент LayoutAnimation в случайном порядке применит всплывающую анимацию к каждому дочернему представлению заданной группы. popinlayout.xml Теперь можно применить созданную анимацию к группе представлений двумя способами — с помощью XML-ресурса или программно. В XML это делается при помощи атрибута android:layoutAnimation у разметки: Чтобы применить анимацию для разметки в коде программы, вызовите метод setLayoutAnimation() из объекта ViewGroup, передавая ему ссылку на соответствующий экземпляр LayoutAnimation. В обоих случаях анимация выполнится один раз, при первом появлении группы представлений. Вы можете вызвать её повторно, запустив метод scheduleLayoutAnimation() из объекта ViewGroup. Таким образом, анимация выполнится при следующем появлении группы представлений. Анимация для разметки также имеет поддержку интерфейса AnimationListener. В следующем листинге показан повторный запуск анимации в контексте группы представлений с помощью интерфейса AnimationListener, который используется для выполнения дополнительных действий по завершении изначальной анимации. Создание анимации для Splash-экрана Ссылка на исходный код приведена в конце статьи Одним из примеров, где можно использовать анимационные эффекты — это экран-заставка игры, которая появляется на несколько секунд, а затем исчезает, уступая место другому экрану-меню. Если на таком экране-заставке вывести просто текст о названии и версии игры, а также логотип, то будет скучно. Мы пойдем по другому пути и сделаем следующее: Поместим на форму TextView для отображения верхней текстовой строки Далее разместим контейнер TableLayout с двумя строками и столбцами — получается четыре ячейки В каждой ячейке разместим элемент ImageView Снова размещаем TextView с другой текстовой информацией И снова размещаем TextView, где будет содержаться информация о версии программы Далее добавляем ресурсы в проект: картинки (res/drawable), цвета для текстовой информации (colors.xml), размеры для шрифтов (dimens.xml). В итоге мы получим следующий результат Создание анимации Будем использовать анимацию преобразований. Создаем папку res/anim, в котором создадим три новых файла fade_in.xml, fade_in2.xml и custom_anim.xml. В первом файле анимация плавно увеличивает непрозрачность (альфа-канал) верхнего текста от значения 0 (прозрачный) до значения 1 (непрозрачный) в течение 2.5 секунд. Во втором файле происходит тоже самое, только добавлен еще один атрибут startOffset. Это означает, что сначала будет задержка в течение 2.5 секунд, а только потом произойдёт анимация с такой же продолжительностью. Её мы применим к нижнему тексту. Получается, что сначала произойдет анимация верхнего текста, а потом анимация нижнего текста. Третья анимация самая интересная. Она будет вращать картинки вокруг своей оси (rotate), а также менять их прозрачность (alpha). Причём вращаться они будут парами. Сначала будут вращаться левые две картинки, а затем — правые. Кроме вращения и изменения прозрачности, также будут меняться их размеры (scale). Управление анимации происходит программным путём. Чтобы применить первую анимацию к верхнему тексту, нужно получить экземпляр элемента TextView в методе onCreate(), загрузить анимационный ресурс в объект Animation и вызвать метод startAnimation() элемента TextView. Аналогично поступаем и со вторым текстовым элементом. Чтобы остановить анимацию, например, в методе onPause(), нужно вызвать метод clearAnimation(). Анимация всех элементов в элементе-контейнере Помимо возможности применения анимации к отдельным элементам, вы можете применить анимацию к каждому элементу View, содержащему в элементе-контейнере (например, TableLayout и к каждому элементу TableRow), используя класс LayoutAnimationController. В этом случае нужно загрузить соответствующую анимацию, создать экземпляр класса LayoutAnimationCotroller, произвести необходимые настройки этого экземпляра и затем вызвать метод setLayoutAnimation() элемента-контейнера. В данном случае нет необходимости вызывать метод startAnimation(), поскольку это сделает экземпляр класса LayoutAnimationController. При использовании данного подхода анимация применяется к каждому дочернему элементу, однако воспроизведение каждой анимации начинается в разное время. Это создает красивый эффект, когда каждый элемент поочередно делает оборот вокруг своего центра. Если после второй строчки вставить метод setOrder(), то анимация пар картинок будет происходить в случайном порядке: Источник
  8. Слайд-шоу
  9. Элемент
  10. Примеры с анимацией преобразований
  11. alpha.xml
  12. rotate.xml
  13. scale.xml
  14. translate.xml
  15. combination.xml
  16. shape.xml
  17. Разметка
  18. Анимация
  19. AnimationListener
  20. Анимация графических файлов
  21. crazycat.xml
  22. Анимация группы представлений
  23. LayoutAnimation — Анимация разметки и групп компонентов
  24. Создание анимации для разметки
  25. popin.xml
  26. popinlayout.xml
  27. Создание анимации для Splash-экрана
  28. Создание анимации
  29. Анимация всех элементов в элементе-контейнере
Читайте также:  Распиновка гнезда зарядки андроид

Анимация преобразований

Анимация может выполняться в виде ряда простых преобразований — изменение позиции, размера, угла вращения и уровня прозрачности на поверхности объекта View. Например, у компонента TextView можно перемещать, вращать, уменьшать или увеличивать текст. Если TextView имеет фоновое изображение, оно будет преобразовано наряду с текстом. Пакет android.view.animation содержит необходимые классы для анимации с промежуточными кадрами.

Основные классы анимации и их соответствия в XML:

Команды анимации определяют преобразования, которые необходимо произвести над объектом. Преобразования могут быть последовательными или одновременными. Каждое преобразование принимает набор параметров, определённых для этого преобразования (начальный размер, конечный размер при изменении размера, стартовый угол и конечный угол при вращении объекта и т. д.), а также набор общих параметров (например, начального времени и продолжительности). Если требуется сделать несколько преобразований одновременно, им задают одинаковое начальное время. Если требуется сделать последовательные преобразования, задается их время старта плюс продолжительность предыдущего преобразования.

Последовательность команд анимации определяется в XML-файле (предпочтительно) или в программном коде.

Создание анимации в XML-файле

XML-файл анимации размещают в каталоге res/anim/ вашего проекта. Файл должен иметь единственный корневой элемент: это будет любой из элементов , , , или элемент , который является контейнером для этих четырех компонентов (и может включать в себя другой контейнер ).

По умолчанию все элементы применяются одновременно. Чтобы запускать элементы последовательно, необходимо определить атрибут startOffset и указать значение в миллисекундах, например:

Атрибуты анимации

  • duration — продолжительность эффекта в миллисекундах
  • startOffset — начальное время смещения для этого эффекта, в миллисекундах
  • fillBefore — когда установлен в true, то преобразование анимации применяется перед началом анимации
  • fillAfter — когда установлен в true, то преобразование применяется после конца анимации
  • repeatCount — определяет число повторений анимации, можно использовать значение infinity (бесконечность)
  • repeatMode — определяет поведение анимации при ее окончании. Возможные варианты: restart (перезапустить без изменений) или reverse (изменить анимацию в обратном направлении)
  • zAdjustment — определяет режим упорядочения оси Z, чтобы использовать при выполнении анимации (нормаль, вершина или основание)
  • interpolator — определяет постоянную скорости, которая описывает динамику визуальной деятельности в зависимости от времени или, говоря простым языком, определяет скорость изменения анимации. Можно использовать любой из элементов подкласса интерполятора, определенных в R.styleable, например: android:interpolator=»@android:anim/decelerate_interpolator»
Читайте также:  Snow runner для андроид

Элемент

Элемент — контейнер, который может содержать другие элементы. Представляет класс AnimationSet. Поддерживает атрибут shareInterpolator, который при значении true указывает на возможность совместного использования этого интерполятора для всех дочерних элементов.

Элемент

Постепенно изменяющаяся анимация прозрачности при помощи AlphaAnimation. Поддерживает следующие атрибуты:

  • fromAlpha — начальное значение прозрачности объекта;
  • toAlpha — конечное значение прозрачности объекта;

Атрибуты содержат значение прозрачности от 0 до 1 типа Float, где 0 означает полную прозрачность объекта.

Элемент

Элемент управляет анимацией изменения размеров объекта и представляет класс ScaleAnimation. Вы можете определить центральную точку изображения (закрепить центр анимации изображения), относительно которой будет изменяться масштабирование объекта. Элемент поддерживает следующие атрибуты:

  • fromxScale — начальный масштаб по X. Допустимы значения от 0 до 1 типа Float
  • toxScale — конечный масштаб по X. Допустимы значения от 0 до 1 типа Float
  • fromYScale — начальный масштаб по Y. Допустимы значения от 0 до 1 типа Float
  • toYScale — конечный масштаб по Y. Допустимы значения от 0 до 1 типа Float
  • pivotX — Х-координата закрепленного центра. Описывает центральную точку масштабирования в процентах от ширины от 0% до 100%
  • pivotY — Y-координата закреплённого центра. Описывает центральную точку масштабирования в процентах от высоты от 0% до 100%

Элемент

Элемент создаёт вертикальную или горизонтальную анимацию движения. Представляет класс TranslateAnimation и поддерживает следующие атрибуты:

  • fromXDelta — начальное положение по X
  • toXDelta — конечное положение по X
  • fromYDelta — начальное положение по Y
  • toYDelta — конечное положение по Y

Атрибуты должны быть в любом из следующих трёх форматов:

  • Абсолютное значение
  • Значения в процентах от -100% до 100%
  • Значения в процентах от -100%p до 100%p, где p указывает процент относительно его родителя.

Слайд-шоу

Например, для эффекта слайд-шоу, когда один элемент выталкивает полностью другой элемент, реализуется двумя анимациями справо-налево или слева-направо.

Элемент

Элемент предназначен для анимации вращения и представляет класс RotateAnimation. Поддерживает следующие атрибуты:

  • fromDegrees — начальный угол вращения в градусах
  • toDegrees — конечный угол вращения в градусах
  • pivotX — координата X центра вращения в пикселах;
  • pivotY — координата Y центра вращения в пикселах

Примеры с анимацией преобразований

Можно создать несколько файлов анимации и применять их для одного объекта. Рассмотрим работу анимации на примере прямоугольника. К сожалению, у меня не заработал пример с изменением прозрачности (alpha), может вам повезет больше. (Как рассказал один из читателей, пример работает на эмуляторе 2.1, а на эмуляторе 2.3.3 уже нет).

Создайте новый проект и в каталоге res/anim/ проекта создайте пять файлов с XML-анимацией: alpha.xml, rotate.xml, scale.xml, translate.xml и файл combination.xml, в котором мы будем использовать комбинацию различных объектов для создания смешанной анимации.

alpha.xml

rotate.xml

scale.xml

translate.xml

combination.xml

shape.xml

Фигуру прямоугольника для анимации определим в файле shape.xml, который будет находиться в каталоге res/drawable.

Разметка

Перейдем к разметке основной формы приложения (main.xml). Поместим элемент ImageView:

Анимация

Анимация запускается в коде следующим образом: надо создать объект Animation через вызов метода AnimationUtils.loadAnimation() и передать ему в качестве параметра контекст активности и ссылку на XML-файл анимации. Затем запускается анимация через метод View.startAnimation(), передавая в него объект Animation:

AnimationListener

В классе Animation есть интерфейс AnimationListener. Интерфейс AnimationListener позволяет создать обработчик событий, который срабатывает в начале или при завершении анимации. Используя его, вы можете совершать какие-либо операции, прежде чем (или после того как) анимация закончит работу. Это может быть изменение содержимого представления или последовательный показ нескольких анимаций.

У интерфейса AnimationListener есть три метода обратного вызова:

  • onAnimationEnd()
  • onAnimationRepeat()
  • onAnimationStart()

В этих методах можно реализовать код обработки события запуска, окончания и перезапуска анимации. Например, при окончании анимации можно сделать объект анимации невидимым, а при запуске снова отобразить на экране:

Вызовите метод setAnimationListener() из объекта Animation и передайте ему в качестве параметра реализацию интерфейса AnimationListener, при необходимости переопределив методы onAnimationEnd(), onAnimationStart() и onAnimationRepeat().

В основном классе создадим меню из пяти пунктов, соответствующих каждому типу запускаемой анимации: Alpha, Scale, Translate, Rotate и Комбинация. В качестве идентификаторов пунктов меню используем идентификаторы ресурсов XML-файлов анимации, упростив тем самым структуру метода onOptionsitemSeiected(), вызываемого при выборе пункта меню.

Анимация графических файлов

Анимация для графических файлов ничем особым не отличается от анимации для графических фигур. Рассмотрим на примере анимацию графического объекта, отображаемого в ImageView. Создайте новый проект и найдите какой-нибудь графический файл с изображением кота (но не собаки, иначе работать не будет!).

В XML-файле анимации создадим следующую структуру: используем элемент для растягивания изображения и вложенный контейнер , в котором определим два дочерних элемента и для одновременного вращения и изменения размеров объекта. Данный файл необходимо сохраним в каталоге res/anim/ под любым именем, например, crazycat.xml

crazycat.xml

В файле разметки поместим кнопку для запуска анимации и один элемент ImageView для нашего изображения.

Осталось написать программный код:

При нажатии кнопки изображение кота сначала плавно растянется по горизонтали, затем одновременно повернется и уменьшится в размерах, после чего вернется в исходное состояние.

Независимо оттого, как анимация изменяет размеры объекта или перемещает его на плоскости, границы элемента View, в который загружено изображение, останутся неизменными: ваша анимация не будет автоматически корректировать размеры представления для размещения объекта. Если анимация выйдет за границы родительского представления, произойдет отсечение объекта анимации.

Анимация группы представлений

Анимацию можно сделать и для нескольких представлений, объединив их в группу. Например, поместив представления в контейнер LinearLayout, причем можно использовать не только графические, но и текстовые представления.

Принцип анимаци останется тем же. В файле разметки приложения разместите дочерний контейнер LinearLayout, в котором разместите ImageView с изображением и TextView с надписью. Для дочернего контейнера обязательно присвойте идентификатор, по которому вы сможете загрузить его в код программы и использовать для анимации.

Код класса практически не будет отличаться от предыдущего примера, за исключением того, что мы работаем с анимацией не отдельного представления, а с анимацией группы представлений:

Источник

LayoutAnimation — Анимация разметки и групп компонентов

Класс LayoutAnimation нужен для применения анимации к группам представлений: передает одиночный объект Animation (или AnimationSet) для каждого дочернего компонента в заранее определенной последовательности.

Используйте объект LayoutAnimationController для задания объекта Animation (или AnimationSet), который применяется к каждому компоненту в группе. Ко всем компонентам, содержащим этот объект, будет применена одна и та же анимация, но вы можете задействовать LayoutAnimationController для указания порядка и времени запуска для каждого компонента.

Для этих целей в Android предусмотрено два класса:

  • LayoutAnimationController — позволяет выбирать начальный сдвиг для каждого компонента (в миллисекундах) и порядок (нормальный, обратный или случайный), в каком анимация применится для каждого дочернего элемента;
  • GridLayoutAnimationController — как производный класс назначает анимационную последовательность для дочерних компонентов с использованием ссылки на строки и столбцы;

Создание анимации для разметки

Чтобы создать новую анимацию для разметки, нужно определить её для каждого дочернего компонента. После создайте новый элемент LayoutAnimation (либо в коде программы, либо в виде внешнего ресурса), ссылающийся на ранее выполненную анимацию и описывающий порядок и время срабатывания, с которыми её необходимо применить.

Создадим простую анимацию в файле popin.xml в каталоге res/anim

popin.xml

А также зададим описание LayoutAnimation в файле popinlayout.xml в той же папке. Элемент LayoutAnimation в случайном порядке применит всплывающую анимацию к каждому дочернему представлению заданной группы.

popinlayout.xml

Теперь можно применить созданную анимацию к группе представлений двумя способами — с помощью XML-ресурса или программно. В XML это делается при помощи атрибута android:layoutAnimation у разметки:

Чтобы применить анимацию для разметки в коде программы, вызовите метод setLayoutAnimation() из объекта ViewGroup, передавая ему ссылку на соответствующий экземпляр LayoutAnimation.

В обоих случаях анимация выполнится один раз, при первом появлении группы представлений. Вы можете вызвать её повторно, запустив метод scheduleLayoutAnimation() из объекта ViewGroup. Таким образом, анимация выполнится при следующем появлении группы представлений.

Анимация для разметки также имеет поддержку интерфейса AnimationListener.

В следующем листинге показан повторный запуск анимации в контексте группы представлений с помощью интерфейса AnimationListener, который используется для выполнения дополнительных действий по завершении изначальной анимации.

Создание анимации для Splash-экрана

Ссылка на исходный код приведена в конце статьи

Одним из примеров, где можно использовать анимационные эффекты — это экран-заставка игры, которая появляется на несколько секунд, а затем исчезает, уступая место другому экрану-меню.

Если на таком экране-заставке вывести просто текст о названии и версии игры, а также логотип, то будет скучно. Мы пойдем по другому пути и сделаем следующее:

  • Поместим на форму TextView для отображения верхней текстовой строки
  • Далее разместим контейнер TableLayout с двумя строками и столбцами — получается четыре ячейки
  • В каждой ячейке разместим элемент ImageView
  • Снова размещаем TextView с другой текстовой информацией
  • И снова размещаем TextView, где будет содержаться информация о версии программы

Далее добавляем ресурсы в проект: картинки (res/drawable), цвета для текстовой информации (colors.xml), размеры для шрифтов (dimens.xml).

В итоге мы получим следующий результат

Создание анимации

Будем использовать анимацию преобразований. Создаем папку res/anim, в котором создадим три новых файла fade_in.xml, fade_in2.xml и custom_anim.xml.

В первом файле анимация плавно увеличивает непрозрачность (альфа-канал) верхнего текста от значения 0 (прозрачный) до значения 1 (непрозрачный) в течение 2.5 секунд.

Во втором файле происходит тоже самое, только добавлен еще один атрибут startOffset. Это означает, что сначала будет задержка в течение 2.5 секунд, а только потом произойдёт анимация с такой же продолжительностью. Её мы применим к нижнему тексту. Получается, что сначала произойдет анимация верхнего текста, а потом анимация нижнего текста.

Третья анимация самая интересная. Она будет вращать картинки вокруг своей оси (rotate), а также менять их прозрачность (alpha). Причём вращаться они будут парами. Сначала будут вращаться левые две картинки, а затем — правые. Кроме вращения и изменения прозрачности, также будут меняться их размеры (scale).

Управление анимации происходит программным путём. Чтобы применить первую анимацию к верхнему тексту, нужно получить экземпляр элемента TextView в методе onCreate(), загрузить анимационный ресурс в объект Animation и вызвать метод startAnimation() элемента TextView.

Аналогично поступаем и со вторым текстовым элементом.

Чтобы остановить анимацию, например, в методе onPause(), нужно вызвать метод clearAnimation().

Анимация всех элементов в элементе-контейнере

Помимо возможности применения анимации к отдельным элементам, вы можете применить анимацию к каждому элементу View, содержащему в элементе-контейнере (например, TableLayout и к каждому элементу TableRow), используя класс LayoutAnimationController.

В этом случае нужно загрузить соответствующую анимацию, создать экземпляр класса LayoutAnimationCotroller, произвести необходимые настройки этого экземпляра и затем вызвать метод setLayoutAnimation() элемента-контейнера.

В данном случае нет необходимости вызывать метод startAnimation(), поскольку это сделает экземпляр класса LayoutAnimationController. При использовании данного подхода анимация применяется к каждому дочернему элементу, однако воспроизведение каждой анимации начинается в разное время. Это создает красивый эффект, когда каждый элемент поочередно делает оборот вокруг своего центра.

Если после второй строчки вставить метод setOrder(), то анимация пар картинок будет происходить в случайном порядке:

Источник

Оцените статью