我注意到animateOpen()
、animateClose()
和animateToggle()
都在做同样的功能,这意味着它们中的任何一个都可以替代其他的。
我注意到的唯一区别是动画的速度因方法而异,如下所示:animateOpen()
,打开时的动画比关闭时的动画快。animateClose()
,关闭时的动画比打开时的动画快。animateToggle()
,两个速度相等。
所以,我的问题是:
我遗漏了什么吗?或者在使用它们之前我只需要检查一下isOpened()
?
我问这个问题是因为当我在某处写下animateClose()
时,我的问题就出现了,我认为如果滑动抽屉已经关闭,那么就不会采取任何行动,但我发现它的行为与animateToggle()
完全相同。
最佳答案
确认,在两个不同的设备上。animateClose()
调用一个已经关闭的抽屉有时会激活抽屉以打开。animateOpen()
对已打开的抽屉调用将始终(?)动画抽屉关闭。
即时函数(close
和open
)似乎如您所期望的那样工作。
鉴于此,我建议将slidingdrawer子类化,并重写打开或关闭drawer的5个方法。使用几个成员变量布尔值,您应该能够确定抽屉的真实状态,并调用(或不调用)适当的超类方法,相应地更新您的状态。
(可能还需要实现OnDrawerXxxListener
s以保持您的状态正确;我的抽屉仅以编程方式打开和关闭,不使用“句柄”,所以我没有测试它。)
编辑添加:这样做的好处是,您可以根据子类的状态加上现有的isOpening()
方法添加isClosing()
和isMoving()
。