【问题标题】:How to change icon for a Marker (TMapMarkerDescriptor) in Delphi 10 for Android?如何在 Delphi 10 for Android 中更改标记(TMapMarkerDescriptor)的图标?
【发布时间】:2016-08-26 12:49:25
【问题描述】:

谁能解释一下如何在 Delphi 中为 Android 应用程序更改标记图标?

我的尝试不起作用

s.Create(16, 16); //Image size
position.Latitude := mapview1.Location.Latitude;
position.Longitude := mapview1.Location.Longitude;
MyMarker := TMapMarkerDescriptor.Create(Position, 'MyMarker');
MyMarker.Draggable := True;
Mymarker.Icon := imagelist1.Bitmap(s,0);
MyMarker.Visible :=True;
Fmarkers.Add(MapView1.AddMarker(MyMarker));

Imagelist 是表单上的 Timagelist。添加了 16x16 图像。

如果我运行我的应用程序,则不会显示任何标记。我是否评论//带有图标的行然后一切正常,但我没有自定义标记图标。

我想要一组 4 个不同的标记图标。

【问题讨论】:

  • 你的变量s声明为什么?
  • s 是我对这个问题的测试和研究的 TSizeF。我可以通过使用 TImage 而不是使用 imagelist 来获得自定义图标,我继续我的研究

标签: android google-maps delphi


【解决方案1】:

TSizeF.Create 返回记录的一个实例,您必须将其保存到变量s 中。这应该可以工作(假设您在 ImageList 的索引 0 处有一个 16x16 位图):

s := TSizeF.Create(16, 16);            //Image size
position.Latitude := mapview1.Location.Latitude;
position.Longitude := mapview1.Location.Longitude;
MyMarker := TMapMarkerDescriptor.Create(Position, 'MyMarker');
MyMarker.Draggable := True;
Mymarker.Icon := imagelist1.Bitmap(s, 0);
MyMarker.Visible :=True;
Fmarkers.Add(MapView1.AddMarker(MyMarker));

您还应该能够跳过创建到不同的变量并直接从构造函数中使用它[未测试] - TSizeF 是一条记录,因此不需要销毁:

MyMarker.Icon := ImageList1.Bitmap(TSizeF.Create(16, 16), 0);

【讨论】:

  • 这是一个很好的提示。谢谢你。 但这并不能解决我的问题。图标仍然没有显示在地图上 我认为这是地图或标记问题
  • 您在图像列表中的正确位置有 16x16 位图吗?您是否在调试器中单步执行了代码以查看在执行该行之后是否分配了 Mymarker.Icon?我不能为你做那件事,因为我没有你的图像列表或你的其余代码。如果这不能解决您的问题,请编辑您的问题并添加更多详细信息。而且没有理由生我的气
  • 我并不难过你 :) 我已经用 Timage 进行了测试。我可以将图像分配给这个。所以图像列表效果很好。标记图标需要特殊格式或大小的图像吗?
  • 还有其他方法可以为标记分配图标吗?
  • 我在源代码中没有看到任何关于图像大小的内容,也没有其他方法可以根据该代码分配图标。您是否查看过 Google 地图文档?
【解决方案2】:

好吧,我长期以来一直在寻找相同问题的答案,而我可以更改它的唯一方法是将我的 png 图像加载到 Designer 上的 TImage 组件,然后从中分配 Bitmap。像这样:

MyMarker.Icon := Image1.Bitmap;

图片大小也无所谓

更新:
我找到了一种从 imagelist 放置自定义图标的方法

s.Create(16, 16); //Image size
position.Latitude := mapview1.Location.Latitude;
position.Longitude := mapview1.Location.Longitude;
MyMarker := TMapMarkerDescriptor.Create(Position, 'MyMarker');
MyMarker.Draggable := True;
MyMarker.Icon := ImageList1.Source.Items[0].MultiResBitmap.Items[0].Bitmap;
MyMarker.Visible :=True;
Fmarkers.Add(MapView1.AddMarker(MyMarker));   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2015-08-30
    相关资源
    最近更新 更多