Android - 围绕X轴和Y轴的地图标记的动画旋转

时间:2015-09-13 21:58:06

标签: android animation canvas rotation marker

我想知道是否可以沿着x轴和y轴动画制作Google地图标记旋转,就像我们如何围绕x轴和/或y轴使用ObjectAnimator旋转ImageView一样。显然,人们可以顺时针旋转(改变)标记的方向,这是沿着z轴(在XY平面中),但我似乎无法找到类似的东西甚至在x-或y周围旋转标记(位图) -轴。我发现很少像this这样的讨论可能与我正在寻找的内容有某种关系,但我对如何解决这个问题感到困惑。非常感谢任何帮助!

更新我 我做了进一步的研究,并提出了如何解决这个问题的建议:

  1. Google地图Marker有一个用于设置其图标的setter方法,称为setIcon。不仅可以通过MarkerOption,还可以作为重置Marker图标的独立方法。此方法需要传入BitmapDescriptor才能更新图标。使用BitmapDescriptorFactory可以轻松地从给定的BitmapDescriptor对象中获取Bitmap

  2. 由于Google地图Marker不支持3D轮播,我们需要以某种方式轮换Bitmap代替{{1}之外的Marker图标本身。就我的发现而言,一种方法是创建MarkerCanvas个对象,而前者与Camera链接以进行3D旋转,后者用于实际执行3D旋转。

  3. 使用Drawable辅助方法,例如CamerarotateXrotateY,除了必要的翻译外,还可以获得自定义的{{1}实例。通过使用rotateZMatrix方法将此Matrix应用于Canvas,我们会强制执行轮换。

  4. 可以将drawable链接到concat,也就是说,我们可以使用setMatrix方法在应用3D变换时实际绘制到Canvas。假设Drawable.draw(Canvas canvas)对象链接到Bitmap。这样,drawable的转换版本现在应由Canvas实例保存。

  5. 使用Bitmap setter方法Bitmap,我们首先回收旧的Marker,然后创建一个新的,并将该对象传递给setIcon

  6. 问题:我想知道这是否是实现我正在寻找的最佳方式。而且,如何实际完成动画。我确定使用BitmapDescriptor并覆盖setIcon的方法不会起作用,因为它只适用于Animation个对象。我进一步相信我最好使用applyTransformation(float interpolatedTime, Transformation t)为运行动画提供必要的计时引擎,即计算动画值并将它们设置在目标对象上,在这种情况下是旋转值。

    更新II 我想出了以下几段不言自明的片段。不幸的是,一旦动画开始,图标就被移除而没有别的。我捕获了日志以确保View实际上有效,事实证明它确实存在。我还删除了所有转换,并确保ValueAnimator是标识,但这没有帮助。获取ValueAnimator并尝试通过Matrix将其绘制到Drawable实例中仍然无效。事实上,当动画开始时,图标就会被删除。为了验证是否真的创建了要替换的位图文件,我尝试采样并将位图保存为SDCARD作为PNG格式。已确认保存的PNG全部为空白,这就是为什么图标被删除的原因。有什么想法吗?

    Bitmap

0 个答案:

没有答案