2012-02-06 6 views
3

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

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

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

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

ответ

1

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

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

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

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

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

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

1

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

+0

Так оно должно вести себя.Это не так, как он себя ведет. – benkc

Смежные вопросы