我想知道是否可以沿着x轴和y轴动画制作Google地图标记旋转,就像我们如何围绕x轴和/或y轴使用ObjectAnimator旋转ImageView一样。显然,人们可以顺时针旋转(改变)标记的方向,这是沿着z轴(在XY平面中),但我似乎无法找到类似的东西甚至在x-或y周围旋转标记(位图) -轴。我发现很少像this这样的讨论可能与我正在寻找的内容有某种关系,但我对如何解决这个问题感到困惑。非常感谢任何帮助!
更新我 我做了进一步的研究,并提出了如何解决这个问题的建议:
Google地图Marker
有一个用于设置其图标的setter方法,称为setIcon
。不仅可以通过MarkerOption
,还可以作为重置Marker
图标的独立方法。此方法需要传入BitmapDescriptor
才能更新图标。使用BitmapDescriptorFactory
可以轻松地从给定的BitmapDescriptor
对象中获取Bitmap
。
由于Google地图Marker
不支持3D轮播,我们需要以某种方式轮换Bitmap
代替{{1}之外的Marker
图标本身。就我的发现而言,一种方法是创建Marker
和Canvas
个对象,而前者与Camera
链接以进行3D旋转,后者用于实际执行3D旋转。
使用Drawable
辅助方法,例如Camera
,rotateX
和rotateY
,除了必要的翻译外,还可以获得自定义的{{1}实例。通过使用rotateZ
或Matrix
方法将此Matrix
应用于Canvas
,我们会强制执行轮换。
可以将drawable链接到concat
,也就是说,我们可以使用setMatrix
方法在应用3D变换时实际绘制到Canvas
。假设Drawable.draw(Canvas canvas)
对象链接到Bitmap
。这样,drawable的转换版本现在应由Canvas
实例保存。
使用Bitmap
setter方法Bitmap
,我们首先回收旧的Marker
,然后创建一个新的,并将该对象传递给setIcon
。
问题:我想知道这是否是实现我正在寻找的最佳方式。而且,如何实际完成动画。我确定使用BitmapDescriptor
并覆盖setIcon
的方法不会起作用,因为它只适用于Animation
个对象。我进一步相信我最好使用applyTransformation(float interpolatedTime, Transformation t)
为运行动画提供必要的计时引擎,即计算动画值并将它们设置在目标对象上,在这种情况下是旋转值。
更新II
我想出了以下几段不言自明的片段。不幸的是,一旦动画开始,图标就被移除而没有别的。我捕获了日志以确保View
实际上有效,事实证明它确实存在。我还删除了所有转换,并确保ValueAnimator
是标识,但这没有帮助。获取ValueAnimator
并尝试通过Matrix
将其绘制到Drawable
实例中仍然无效。事实上,当动画开始时,图标就会被删除。为了验证是否真的创建了要替换的位图文件,我尝试采样并将位图保存为SDCARD作为PNG格式。已确认保存的PNG全部为空白,这就是为什么图标被删除的原因。有什么想法吗?
Bitmap