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

2023-12-04

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

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

  1. 谷歌地图Marker有一个设置其图标的setter方法,称为setIcon。不仅通过MarkerOption也可以作为一种独立的方法来重置Marker图标。该方法期望一个BitmapDescriptor传入以更新图标。使用BitmapDescriptorFactory一个人可以很容易地得到一个BitmapDescriptor从给定的Bitmap目的。

  2. 自从谷歌地图Marker不支持 3D 旋转,我们需要以某种方式旋转Bitmap它代替了Marker图标外Marker本身。就我的发现而言,做到这一点的一种方法是创建一个Canvas and a Camera对象,而前者链接到Drawable要进行 3D 旋转,后者用于实际执行 3D 旋转。

  3. Using Camera辅助方法如rotateX, rotateY, and rotateZ,除了任何必要的翻译外,还可以获得一份定制的Matrix实例。通过应用这个Matrix to Canvas使用,例如,concat or setMatrix方法中,我们强制执行轮换。

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

  5. Using Marker设置方法setIcon,我们首先回收旧的BitmapDescriptor然后创建一个新对象,并将该对象传递给setIcon.

问题:我想知道这是否是实现我正在寻找的目标的最佳方式。此外,如何实际完成动画。我确信有一种方法像使用的方法Animation并覆盖它applyTransformation(float interpolatedTime, Transformation t)不起作用,因为它仅适用于View对象。我进一步相信我最好使用ValueAnimator它为运行动画提供了必要的时序引擎,即计算动画值并将其设置在目标对象上,在本例中为旋转值。

更新二我想出了以下代码片段,它几乎是不言自明的。不幸的是,一旦动画开始,图标就被删除了,什么也没有。我捕获了日志以确保ValueAnimator确实有效,而且事实证明它确实有效。我还删除了所有转换并确保Matrix是身份,但这没有帮助。得到Drawable并试图将其纳入Bitmap实例通过Canvas还是不行。事实上,当动画开始时,图标就被简单地删除了。为了验证位图文件是否确实被创建以供替换,我尝试对位图进行采样并将其以 PNG 格式保存到 SDCARD 中。已确认保存的 PNG 都是空白的,这就是图标被删除的原因。任何想法?

    private void animateMarker() {
    if (mCamera == null) {
        mCamera = new Camera();
    }

    ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
    animator.setDuration(300);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
//              float interpolatedTime = ((Float) (animation.getAnimatedValue())).floatValue();
//              final double radians = Math.PI * interpolatedTime;
//              float degrees = (float) (180.0 * radians / Math.PI);
                final Matrix matrix = new Matrix();

//              mCamera.translate(0.0f, 0.0f, (float) (150.0 * Math.sin(radians)));
//              mCamera.rotateX(degrees);
//              mCamera.rotateY(degrees);
//              mCamera.rotateZ(degrees);
//              mCamera.getMatrix(matrix);

                Resources resources = mContext.getResources();
                Drawable drawable = resources.getDrawable(R.drawable.custom_pin);
                Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
                    Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
//              mCamera.applyToCanvas(canvas);
//              canvas.setMatrix(matrix);
//              drawable.draw(canvas);
                canvas.drawBitmap(bitmap, matrix, null);
                mMarkerSetLocation.setIcon(mBitmapDescriptorFactory.fromBitmap(bitmap));
        }
    });
    animator.start();
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 地图标记绕 X 轴和 Y 轴的动画旋转 的相关文章

随机推荐

  • 将 4 个字符的字符串转换为 int32

    有没有一种快速的方法将 4 个字符转换为 32 位 int 我知道我可以像这样循环它 string key ABCD int val 0 for int i 0 i lt 4 i int b int key i int Math Pow 2
  • 如何在 Java GUI 中用鼠标光标拖动图像?

    我的代码调用目录中的 n 个图像来放置在 JPanel 上 public void imageAdder int n String name BufferedImage myPic null for int i 0 i lt n i try
  • mysql 搜索多列

    下面显示了名为 posts 的表中三列 上午 下午和晚上 的数据如何存储 假设用户想要搜索以下匹配的记录 早上 周一 周二 下午 周一 Mysql 查询必须在所有三列中搜索这些匹配的数据 我设法对单列执行此操作 例如 下午 但是如何更改我的
  • JavaScript数组长度为0

    我遇到了一些奇怪的行为 如下所示 它显示数组长度为 0 尽管在它之前打印它表明长度显然大于 0 var getTopSelection function callback var topSelection for var i 0 i lt
  • 如何设置 os x 中的应用程序使用的 $PATH

    我正在使用 ant 构建我的项目 并使用 svnversion 可执行文件将版本 ID 插入到我的源代码中 以便于跟踪版本 从命令行运行这个 ant 文件是有效的 我已经在 profile 中设置了 PATH 以包含 svnversion
  • 为 iPhone SDK 编译 Freetype (XCode)

    我想知道是否有人知道如何在 iPhone SDK 的 XCode 中配置 FreeType 我一直在尝试但没有成功 理想情况下 您需要使用最新的工具进行构建 从 iOS 6 0 SDK 版本开始 最低 SDK 版本为 4 3 并针对 arm
  • 将带有图像的 JLabel 添加到 JList 以显示所有图像

    这是我的代码 它不在框架中显示图像 而是显示一些文本 有人会建议我应该在代码中进行哪些更改 以便它允许我在框架中显示图像吗 import java awt Component import java awt Image import jav
  • 如何规范 Git 中的工作树行结尾?

    我克隆了一个行结尾不一致的存储库 我添加了一个 gitattributes它为我想要规范化的文件设置文本属性 现在 当我提交更改时 我收到消息 warning CRLF will be replaced by LF in FILE The
  • C# - 为什么这个变量在通过方法后没有被更改[重复]

    这个问题在这里已经有答案了 所以我显然对编程相当陌生 但我试图找出为什么这不起作用 我正在尝试获取字符串 myname 并将 Mr 添加到其开头 我知道我可以简单地做到这一点myname Mr myname但是我试图了解如何使用方法来更改变
  • n 组位的高效随机排列

    对于产生精确的位模式的问题n设置位 我知道两种实用的方法 但它们都有我不满意的局限性 首先 您可以枚举在预先计算的表中设置了那么多位的所有可能的字值 然后在该表中生成一个随机索引以挑选出可能的结果 这样做的问题是 随着输出大小的增长 候选输
  • 使用电子邮件地址将文件上传到云端

    所以我不确定这是否可能以及是否有意义 我正在尝试在我的应用程序中学习和使用云空间 因此 作为示例 我尝试创建一个应用程序来在 Google Drive 中上传文件 我注册了我的应用程序并使用了谷歌提供的一些参考资料 我现在可以上传文件了 我
  • 我可以有一个没有聚集索引的主键吗?另外我可以有多值聚集索引吗?

    各位 我想了解以下问题的答案 我可以有一个没有聚集索引的主键吗 我知道当我们在列上创建主键约束时 它默认创建一个聚集索引 那么在这种情况下 我应该如何停用聚集索引 我可以有一个包含多个列的聚集索引吗 就像在非聚集中一样 我可以为单个非聚集索
  • Django:如何为允许多个文件上传的字段编写干净的方法?

    我有一个用于上传图像的表单 如果我遵循 Django 的标准清理表单的特定字段属性 这就是我的 clean 方法通常的样子 class UploadImagesForm forms Form image forms FileField de
  • 填充二维 numpy 数组给定索引之间的值

    给定一个 numpy 数组 a np zeros 10 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • Windows 上需要 Mono 3.0 的配置文件

    是否有一个教程告诉我如何编写 mono 3 0 的配置文件 以便我可以使用它 微软视觉工作室 2010 其背后的原因是我的应用程序使用绑定列表 当我尝试在 Mono 中运行时 我收到此错误 WindowsFormsApplication2
  • 我正在学习java中的异常处理(基本上是继承)

    看看下面的程序 import java io import java rmi class class1 public void m1 throws RemoteException System out println m1 in class
  • for循环内的回调完成后如何执行函数?

    我在搜索函数中有一个 for 循环 其中有一个在循环内执行回调的函数 我想在循环之后以及所有回调完成之后执行 BUILD 函数 我不知道如何做到这一点 因为循环在所有回调完成之前完成 回调是获取数据的 API 请求 我想使用该数据进行 BU
  • 使用 Angular formArray 动态添加表单字段

    我有一些表单字段 想要动态添加更多来自另一个视图的字段 用户可以在其中输入表单字段类型 长度和名称 我需要使用这些值构造表单字段 我如何设法构建一个字段 textbox name is one 但是如果我尝试添加另一个字段 textbox
  • pandas中如何判断某列是否包含某些元素

    我想检查一下该列是否app包含元素myList import pandas as pd df pd DataFrame app a b c e f myList b f print df Output app 0 a b c 1 e f E
  • Android - 地图标记绕 X 轴和 Y 轴的动画旋转

    我想知道是否可以为 Google 地图标记沿 x 轴和 y 轴旋转设置动画 就像我们如何使用 ObjectAnimator 围绕 x 轴和 或 y 轴旋转 ImageView 一样 显然 人们可以顺时针旋转 改变 标记的方向 即沿着 z 轴