android - 将标记方向更改为特定点
问题描述
我用地图构建了一个 android 应用程序,并添加了一些自定义标记,让我告诉你。
我想将那张图片旋转到另一个点。我也保存了另一点的坐标。
这是现在保存在数据库中的关于这个标记的内容。
纬度和经度是实际标记的位置,而del_lat,del_lng是我要指向的收货地址。如何在该位置旋转图像?
这是我的 ClusterManagerRenderer
public class ClusterManagerRenderer extends DefaultClusterRenderer<FinalMarkerCluster> {
private final IconGenerator iconGenerator;
private ImageView imageView;
private final int markerWidth;
private final int markerHeight;
public ClusterManagerRenderer(Context context, GoogleMap map, ClusterManager<FinalMarkerCluster> clusterManager) {
super(context, map, clusterManager);
iconGenerator = new IconGenerator(context.getApplicationContext());
imageView = new ImageView(context.getApplicationContext());
markerWidth = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
markerHeight = (int) context.getResources().getDimension(R.dimen.custom_marker_image);
imageView.setLayoutParams(new ViewGroup.LayoutParams(markerWidth,markerHeight));
int padding = (int) context.getResources().getDimension(R.dimen.custom_marker_padding);
imageView.setPadding(padding, padding,padding,padding);
iconGenerator.setContentView(imageView);
}
@Override
protected void onBeforeClusterItemRendered(FinalMarkerCluster item, MarkerOptions markerOptions) {
imageView.setImageResource(item.getIconPicture());
Bitmap icon = iconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(item.getTitle());
}
@Override
protected boolean shouldRenderAsCluster(Cluster<FinalMarkerCluster> cluster) {
return false;
}
}
在这里我正在创建标记
private void setRendering(List<MarkerCluster> markerClusters) {
for(int i = 0 ;i < markerClusters.size() ;i++) {
LatLng latLng = new LatLng(markerClusters.get(i).getLatitude(), markerClusters.get(i).getLongitude());
String title = markerClusters.get(i).getTitle();
String snippet = markerClusters.get(i).getSnippet();
LatLng delLatLng = new LatLng(markerClusters.get(i).getDel_lat(), markerClusters.get(i).getDel_lng());
int pic = markerClusters.get(i).getIconPicture();
String offerid = markerClusters.get(i).getOfferid();
FinalMarkerCluster finalMarkerCluster = new FinalMarkerCluster(
latLng,
title,
snippet,
pic,
offerid,
delLatLng
);
finalMarkerClusters.add(finalMarkerCluster);
}
if(mGoogleMap != null) {
if(mClusterManager == null) {
mClusterManager = new ClusterManager<FinalMarkerCluster>(getApplicationContext(),mGoogleMap);
}
if(mClusterManagerRender == null) {
mClusterManagerRender = new ClusterManagerRenderer(getApplicationContext(),mGoogleMap,mClusterManager);
mClusterManager.setRenderer(mClusterManagerRender);
}
for(int j = 0; j< finalMarkerClusters.size();j++) {
mClusterManager.addItem(finalMarkerClusters.get(j));
}
mClusterManager.cluster();
}
}
这是 MarkerCluster 对象
public class FinalMarkerCluster implements ClusterItem {
private LatLng position;
private String title;
private String snippet;
private int iconPicture;
private String offerId;
private LatLng deliveryPosition;
public FinalMarkerCluster(LatLng position, String title, String snippet, int iconPicture, String offerId, LatLng deliveryPosition) {
this.position = position;
this.title = title;
this.snippet = snippet;
this.iconPicture = iconPicture;
this.offerId = offerId;
this.deliveryPosition = deliveryPosition;
}
WITH GETTERS AND SETTERS
我只想在那一点上旋转图像,提前谢谢你!
解决方案
这并没有解决聚类问题,但对于简单的标记旋转,两件事会派上用场:
要确定从 A 点(示例屏幕右下方的标记)到 B 点的方位,请使用SphericalUtil.computeHeading
:
// add two markers
LatLng m1 = new LatLng(40.763807, -80.362280);
LatLng m2 = new LatLng(40.821666, -80.636242);
MarkerOptions m1o = new MarkerOptions().position(m1).title("m1").flat(true);
MarkerOptions m2o = new MarkerOptions().position(m2).title("m2").flat(true);
double hdg = SphericalUtil.computeHeading(m1,m2);
并在第二个标记的方向上旋转第一个标记(A,右下),将轴承应用于标记旋转:
m1o.rotation((float)hdg);
并添加标记
mMap.addMarker(m1o);
mMap.addMarker(m2o);
请注意使用flat
which 在屏幕旋转时保持北对齐。如果不希望这样flat
做,则删除非旋转标记。
另请注意,旋转是围绕可能需要进一步考虑的锚点。
在此图像中,屏幕已旋转,因此“屏幕向上”为 ~NNW,用于演示目的。
推荐阅读
- python - 使用在 django 中工作的分页 notb 初始化和增加计数器
- spring-boot - 尝试使用 SPRING BOOT 从 SQL 中提取数据时出错
- mongodb - 使用 MongoDB Compass 导出聚合数据
- javascript - 如何使用 Puppeteer 获取元素数组并单击随机元素
- spring-mvc - springfox-swagger-3-0- 不适用于非启动 spring4 mvc 项目
- heroku - 如何知道谁在使用应用程序名称?
- angular - Angular 应用的下拉值未预先填充
- mysql - Sequelize - 无法为 1:N 关系添加外键约束
- javascript - 如何使用网络上的身份验证规则从 Firebase 实时数据库中读取数据?
- javascript - 将标头发送到客户端后无法设置标头 - 错误