Android视图动画问题:根据事件启动动画
我有几个 ImageViews
,每个都有一个无限跳动的 ScaleAnimation
和三个对我来说没有意义的尝试。
- 如果我在动画膨胀后立即设置动画,则动画将完美运行。这也告诉我创建动画的辅助函数(在所有三种情况下使用)工作正常。
- 如果我立即设置动画,但开始时间为
Long.MAX
,然后调用icon.getAnimation().start()
,动画会开始,但速度会变慢比应有的速度要快,并且比例不是我设置的。无论我将动画比例和持续时间参数设置为什么,它看起来总是一样的,与之前的情况不同。 - 如果我使用新的
Animation
对象调用icon.startAnimation(..)
,我不会得到任何动画。深入研究 Android 源代码,startAnimation(..)
调用invalidate()
,这与setAnimation(..)
不同。如果我调用 icon.getAnimation().start() ,然后调用 icon.invalidate() ,我会得到相同(缺乏)的行为。这向我暗示无效会以某种方式破坏动画。
那么,考虑到上述所有情况,这是我可能犯下的错误的症状吗?有什么我没有描述但我应该做的事情吗?
最后,我尝试使用相对和绝对指定的缩放枢轴进行此操作,认为相对于 View.invalidate()
和 Animation.reset( )
。
I have several ImageViews
each with an indefinitely throbbing ScaleAnimation
and three attempts that don't make sense to me.
- If I set the animation immediately after inflating the animation the animation runs perfectly. This also tells me my helper function to create the animation (used in all three cases) is working fine.
- If I set the animation immediately, but with a start time of
Long.MAX
, and later callicon.getAnimation().start()
, that animation starts but the speed is faster than it should be and the scale is not what I set. No matter what I set the animation scale and duration parameters to, it always looks the same, unlike the previous case. - If I call
icon.startAnimation(..)
with a newAnimation
object, I get no animation. Digging into Android source,startAnimation(..)
callsinvalidate()
, unlikesetAnimation(..)
. If I callicon.getAnimation().start()
followed byicon.invalidate()
I get the same (lack of) behavior. This hints to me that the invalidate somehow breaks the animation.
So, given all of the above, is this symptomatic of a mistake I might have made? Is there something I didn't describe that I should be doing?
Finally, I've tried this with both a scale pivot specified both relatively and aboslutely, thinking there might be a bug in event order with respect to View.invalidate()
and Animation.reset()
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
很多人都在动画方面遇到问题。在 Honeycomb 之前使用动画处理任何东西都是一件非常痛苦的事情。
我建议下载 NineOldAndroids 库并将其用作导入,这样您就可以在所有版本的 android 上使用 Honeycomb 动画 API (甚至高达 1.0)。
A lot of people are having problems with animation. Working with animation on anything before Honeycomb is a real pain.
I recommend downloading the NineOldAndroids library and using it as imports, that way you can use the Honeycomb animation API on all versions of android (even up to 1.0).