Далее этот метод будет принимать все события связанные с касанием экрана. Однако, касания хотелось бы преобразовать в уже полюбившийся формат смещения от 0 до 1 с учетом инерции, анимации движения и прочих радостей. Для этого был написан свой обработчик касаний, который на выходе «выдавал» как раз то, что нужно. Ниже привожу код получившегося обработчика:
public void onCreate(SurfaceHolder surfaceHolder) {
Из-за всех этих проблем было решено сделать свое решение, которое бы выполнялось на всех устройствах. Для этого был найден метод onTouchEvent того же класса WallpaperService.Engine. Для использования данного метода предварительно необходимо включить его вызов:
Собственный метод, класс ZTouchMove
Если рабочие столы в устройстве «закольцованы», то при переходе с последнего на первый происходит резкая прокрутка обоев.
Не все устройства делают это достаточное количество раз, из-за чего резко падает плавность движения обоев.
Не все устройства (оболочки) вызывают метод onOffsetsChanged при пролистывании рабочих столов. Что удивительно, чаще это случается с самыми новыми устройствами (например, HTC One X).
Все было бы хорошо, если бы не недостатки данного метода:
Таким образом, передав этот параметр в Renderer ваших обоев, можно смещать их в нужную сторону, реализовав параллакс эффект. Преимущества очевидны: минимум кода и синхронная работа с рабочим столом.
Из всех передаваемых параметров нас интересуют xOffset и yOffset, а применительно к живым обоям, достаточно использовать xOffset. Этот параметр изменяется от 0 до 1, равен 0 при одном крайнем положении рабочего стола и 1 при другом крайнем положении рабочего стола. Если рабочий стол находится в положении по умолчанию (посередине), параметр xOffset равен 0.5. Например, для 3-х рабочих столов xOffset будет равен соответственно 0, 0.5, 1. При движении от одного рабочего стола к другому параметр изменяется плавно, а метод onOffsetsChanged вызывается многократно. Однако «плавность» может отличаться на разных устройствах.
onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset)
Начиная с API7, появился класс WallpaperService.Engine с методом onOffsetsChanged. Данный метод вызывается каждый раз, когда рабочий стол меняет свою позицию. Для использования его достаточно переопределить в собственной реализации класса WallpaperService.Engine. Метод имеет следующую сигнатуру:
Стандартный метод
Ниже будут рассмотрены стандартный и собственный методы реализации. Указаны недостатки и достоинства каждого из них.
Каждый, кто пробовал установить себе живые обои, замечал параллакс эффект при перемещении между рабочими столами. Выглядит он очень занимательно, но вот в его реализации возникают проблемы, которые и будут освещены в данной статье. Речь пойдет про реализацию параллакс эффекта под живые обои Android.
Параллакс эффект для живых обоев на Android
Отображать сообщения .
21 сентября 2012 в 01:47
хабрахабр:все записи
Заголовок (необязательно):
Комментариев нет:
Отправить комментарий