Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android

Сделайте Живые Обои под Android Используя GIF Анимацию

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Andrey Rybin (you can also view the original English article)

Вы когда нибудь видели красивую GIF анимацию, которая повторяется беспрерывно, и хотели бы поставить такую в качестве живых обоев на ваше устройство, которое работает под Android? Что ж, вы можете это сделать, и в этом уроке, я покажу вам как.

Введение

Чтобы создавать интересные и красивый живые обои с нуля, используя только математику и код, который будет генерировать анимацию, возможно придется много и долго потрудиться. А так же нужно привлечь всю свою креативность. С другой стороны, создать анимированные GIF обои, или найти такие в сети - гораздо проще. В этом уроке, вы узнаете, как конвертировать любоую GIF анимацию в живые обои.

Необходимая первоначальная подготовка

Убедитесь, что у вас установлена последняя версия Android Studio. Вы можете закачать ее с сайта Android Developer.

Хотя можно сделать любую GIF анимацию, я рекомендую вам загрузить хороший синемаграф. Синемаграф - это не что иное, как GIF анимация, которая обычно делается из видео, и плавно зацикливается. Вы можете найти много вариантов на Flickr.

В этом уроке, я использую синемаграф, созданный пользователем Flickr - djandyw.com, так как он распространяется по  лицензии Creative Commons.

1. Создайте Новый Проект

Запустите Android Studio, создайте новый проект, и дайте ему название GIFWallpaper. Дайте ему уникальное имя, если вы планируете разместить его на Google Play.

Задайте для minimum SDK - API 8: Android 2.2 (Froyo).

Нашему приложению не нужен статус Activity, поэтому выбираем Add No Activity и жмем Finish.

2. Описание Обоев

Для живых обоев, нужен файл, который будет их описывать. Создайте новый XML файл res/xml/wallpaper.xml и замените его содержание следующим:

Значения имени (label) и иконки (thumbnail)  важны, так как они будут показываться в списке обоев доступных на вашем устройстве.

3. Редактируем Манифест

Для запуска живых обоев, нашему приложению необходимо прописать одно разрешение - android.permission.BIND_WALLPAPER.

Живые обои запускаются как объект Service, который может принимать значение android.service.wallpaper.WallpaperService в качестве intent action. Назовем Service GIFWallpaperService -  и добавим его в манифест проекта - AndroidManifest.xml.

Далее, чтобы быть уверенным, что наше приложение ставится на устройство,которое может работать с живыми обоями, мы добавим в манифест такой код:

4. Добавляем GIF анимацию

Копируйте загруженную с Flickr GIF анимацию в папку проекта - assets. Я дал ему название girl.gif.

5. Создаем Сервис

Создадим новый Java класс и назовем его GIFWallpaperService.java. Он должен наследовать класс WallpaperService.

Поскольку WallpaperService - это абстрактный класс, вы должны переопределить метод onCreateEngine и вернуть экземпляр вашему Engine, который может отрисовать кадры для GIF.

Чтобы использовать анимированный GIF, вы должны сперва конвертировать его в объект Movie. Для этого вы можете использовать метод decodeStream класса Movie. После того как Movie создан, отправьте его как параметр в конструктор Engine.

Вот как должен выглядеть метод onCreateEngine:

6. Создаем Engine

Теперь давайте работать над Engine. Создайте класс GIFWallpaperEngine внутри класса GIFWallpaperService, который будет наследовать WallpaperService.Engine.

В этом классе добавим следующие поля:

  • frameDuration: целое число, указывающее длину задержки между перерисовкой анимации. Значение 20, дает нам 50 фреймов в секунду.
  • visible: логическая переменная, которая дает программе знать, когда  именно обои видны на дисплее. Это важно, потому что нам не нужно отрисовывать обои, когда их не видно.
  • movie: это анимированный GIFв форме объекта Movie.
  • holder: это отсылка к объекту SurfaceHolder доступному в программе. Он будет инициирован с помощью описания метода onCreate.
  • handler: это объект Handler, который будет использоваться для запуска Runnable, который отвечает за отрисовку обоев.

Ваш класс должен выглядеть таким образом:

Теперь создадим метод под названием draw, который будет отрисовывать содержимое gif файла. Давайте распишем этот метод:

  • Сначала мы проверяем переменную visible на условие true. Если это так, то мы продолжаем.
  • Используем комманду SurfaceHolder's из метода lockCanvas для создания холста - Canvas, на котором будет отрисовываться наша анимация.
  • Рисуем кадра GIF анимации на Canvas, после масштабирования и позиционирования.
  • После того, как отрисовка завершена, передаем Canvas  назад в SurfaceHolder.
  • Обновляем текущий кадр GIF анимации, используя метод setTime объекта Movie.
  • Вызываем метод снова используя handler после ожидания frameDuration в миллисекундах.

Метод draw никогда не будет вызываться непосредственно. Он всегда вызывается через использование объектов Handler и Runnable. Поэтому, двайте создадим объект Runnable и назавем его drawGIF.

Добавьте в класс GIFWallpaperService следующий код:

Метод onVisibilityChanged автоматически вызывается, каждый раз когда будет меняться состояние обоев. Мы должны переписать его, что бы на основе значения аргумента visible, запускать или останавливать drawGIF. Метод removeCallbacks объекта Handler будет использоваться для остановки запущенных обоев drawGIF.

И наконец, пререпишем метод onDestroy для  Engine, который будет останавливать запуск drawGIF, если обои деактивированы.

7. Скомпилируйте и Установите

Теперь ваши живые обои готовы. Скомпилируйте их и установите на ваш девайс под Android. После того, как вы их установите, вы сможете найти их в списке доступных обоев.

Большинство лаунчеров дают вам возможность изменять обои, после долгого нажатия на экран. Или вы можете зайти в настройки экрана, чтобы сменить обои.

Если GIF выглядить слишком маленьким, или неправильно позиционирован, вернитесь вновь к методу draw  и настройте масштаб и положение.

Заключение

Тепере вы знаете, как использовать GIF анимацию, чтобы создать живые обои. Обязательно поэкспериментируюйте с другими вариантами GIF анимации. Если вы захотите выложить свои обои на Google Play, убедитесь, что у вас есть разрешение, от автора, на использование его GIF анимации в коммерческих целях. Зайдите на сайт Android Developer, чтобы узнать больше о классе WallpaperService.


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.