【问题标题】:Is it possible to animate a drawable without going through a View?是否可以在不通过视图的情况下为 drawable 设置动画?
【发布时间】:2011-08-30 16:41:26
【问题描述】:

(这里指的是旧的Android动画系统,不是Honeycomb引入的属性动画。)

我正在努力思考如何为MapView 上的标记设置动画。由于地图视图使用地图Overlays,并且由于覆盖既不是视图也不是将它们的标记公开为Views,而是作为Drawables,我正在寻找在不将其放入视图容器的情况下为drawable设置动画的方法。

这可能吗?查看 Android 源代码,似乎Animation 及其各种实现仅包含用于计算动画应用的数学变换的代码。同样,例如RotateDrawable 仅包含计算旋转的代码,以及将转换后的可绘制对象绘制到画布的代码。

但是,它们都不包含播放动画的代码;我通过View.startAnimation(animation)使用时只能看到动画播放。

有没有办法在没有View 的情况下播放动画或使用动画drawable?

【问题讨论】:

    标签: android animation


    【解决方案1】:

    我正在努力思考如何为 MapView 上的标记设置动画。

    编写您自己的Overlay,其工作方式类似于ItemizedOverlay,但可以使用ImageView 和经典动画框架或您自己的绘图代码执行您自己的动画。

    有没有办法在没有 View 的情况下播放动画或使用动画 drawable?

    我还没有尝试过AnimationDrawableItemizedOverlay,所以如果你只需要逐帧动画,那至少值得一试。否则,恐怕你又要重新开始自己的工作了Overlay

    【讨论】:

    • 嗨,Mark,是的,我已经尝试过类似于 1) 的方法:我通过 ImageView 支持 OverlayItem,并从 OverlayItem.getMarker 返回其可绘制的图像。但是,这仅在我还将 ImageView 添加到视图树(我将其作为子项添加到 MapView)时才有效,否则动画将不会播放。但是,如果我这样做,那么由于某种原因,ImageView 被渲染/两次/,一次播放动画,一次不播放...
    • @Matthias:“但是,如果我这样做,那么由于某种原因,ImageView 会被渲染/两次/,一次播放动画,一次不播放......” - 可能发生的事情是Drawable 被渲染了两次。当您要求MapView 显示Drawable 两次(一次作为OverlayItem,一次作为ImageView)时,当然这就是我所期望的。请注意,我并没有说让你创建自己的ItemizedOverlay——我说你需要创建自己的Overlay,绕过ItemizedOverlay,这样你就可以使用ImageViews而不是Drawables。跨度>
    • 当然可以。这意味着重新实现 ItemizedOverlay 所做的一切,例如处理焦点、交互和标记。 :-/
    • @Matthias: “但是,由于某种原因,ImageView 被渲染 /twice/”——我认为在开始动画之前将 imageview 设置为不可见应该适合你。
    • 不,不幸的是它没有。试过了 :) 将其设置为 GONE 也无济于事;这只会导致视图被完全从布局中删除,并且动画再次消失。我目前正在调查执行 Mark 建议所需的工作,即重新实现由 Views 支持的 Map 叠加层,而不是 Drawables。当我到达任何地方时会报告。 (问题是 Overlay 及其子类是封闭源代码,所以我几乎是在黑暗中戳。)
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多