Android, SlidingDrawer - PullRequest
       7

Android, SlidingDrawer

3 голосов
/ 06 февраля 2012

Я заметил, что animateOpen(), animateClose() и animateToggle() выполняют одну и ту же функцию, что означает, что любой из них может заменить другие.
Единственное отличие, которое я заметил, было то, что скорость анимации варьируется от одного метода к другому следующим образом:

  1. animateOpen(), анимация при открытии на быстрее , чем анимация при закрытии .
  2. animateClose(), анимация при закрытии на быстрее , чем анимация при открытии .
  3. animateToggle(), обе скорости равны .

Итак, мой вопрос:
Я что-то пропустил? или мне просто нужно проверить isOpened() перед использованием любого из них?

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

Ответы [ 2 ]

1 голос
/ 16 ноября 2012

Подтверждено на двух разных устройствах.

  • animateClose() вызов для уже закрытого ящика приведет к иногда оживлению выдвижного ящика.
  • animateOpen() вызов для уже открытого ящика всегда (?) Оживляет ящик до закрытия.

Непосредственные функции (close и open), кажется, работают так, как вы ожидаете.

Учитывая это, я бы предложил создать подкласс SlidingDrawer и переопределить 5 методов, которые открывают или закрывают ящик.Используя несколько логических переменных-членов, вы сможете определить реальное состояние ящика и вызвать (или не вызвать) соответствующий метод суперкласса, соответственно обновив ваше состояние.

(Возможно, также потребуется реализоватьOnDrawerXxxListener s, чтобы сохранить ваше правильное состояние; мой ящик открывается и закрывается только программно, без использования «ручки», поэтому я не проверял это.)

Изменить, чтобы добавить: Приятная вещь оДля этого вы можете добавить isOpening() и isClosing() в зависимости от состояния вашего подкласса плюс существующий метод isMoving().

1 голос
/ 26 октября 2012
Публичные методы

animateOpen, animateclose и animateToggle сделают слайд открытым, закрытым или переключаться с анимацией соответственно.Методы должны сравниваться с open, close, который откроет и закроет слайдер без анимации.Скорость анимации не должна меняться в реализации по умолчанию.

...