gpt4 book ai didi

android - 关闭 MyLocationOverlay 组件中的自动重新居中功能

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:48 25 4
gpt4 key购买 nike

我的 GoogleMap API for Android 组件 MyLocationOverlay 有问题。每次设备位置发生变化(并且用户位置超出可见部分或 map )时,我都想关闭 MyLocationOverlay 自动重新居中功能(到当前用户位置)。

当用户位置超出屏幕时,似乎没有关闭不需要的 map 自动居中功能的标志

例如

public class LocationTest extends MapActivity{

private MapView map;
private MapController controller;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
map = (MapView) findViewById(R.id.map);
final MyLocationOverlayUpdate overlay = new MyLocationOverlayUpdate(this, map);
overlay.enableMyLocation();
map.getOverlays().add(overlay);
}

@Override
protected boolean isRouteDisplayed() {
return false;
}
}

public class MyLocationOverlayUpdate extends MyLocationOverlay {

public MyLocationOverlayUpdate(Context context, MapView mapView) {
super(context, mapView);
}

public void drawMyLocation(Canvas canvas, MapView mapView,
Location location, GeoPoint geoPoint, long when) {}
}

我通过网络查找了这个问题,但没有找到提供的解决方案。

找到的其他信息:

  • 我猜文档是错误的、错误的,或者只是过时的说法:

    可选地,构造函数也可以带一个 MapController 并用它来保持本地图离开屏幕时,通过平移 map 可以看到“我的位置”点

因为没有接受 MapController 作为参数的构造函数,看来我别无选择保持“我的位置”点可见或不可见。

  • 我不小心找到了解决方法,方法是重写方法 drawMyLocation() 而不调用 super.drawMyLocation() 解决了 map 重新居中的问题(不需要的“功能”关闭)。但是我必须重新实现 drawMyLocation() 方法,因此更改默认外观(并花费时间...)

也许有更明确的解决方案?

最佳答案

扩展 MyLocationOverlay 类并通过覆盖 drawMyLocation 方法重新实现叠加动画。

public class CustomMyLocationOverlay extends MyLocationOverlay {

private static final String TAG = "Bankomatai";


private Drawable[] slips;
private final MapView mapView;
private int currSlip = 0;
private Location savedFix = null;
Point point = new Point();
Rect rect = new Rect();
private Handler handler = new Handler();
private Runnable overlayAnimationTask;


public CustomMyLocationOverlay(Context context, MapView mapView) {
super(context, mapView);
this.mapView = mapView;
slips = new Drawable[4];
slips[0] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_1);
slips[1] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_2);
slips[2] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_3);
slips[3] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_4);
overlayAnimationTask = new Runnable() {

@Override
public void run() {
currSlip = (currSlip + 1) % slips.length;
CustomMyLocationOverlay.this.mapView.invalidate();
handler.removeCallbacks(overlayAnimationTask);
handler.postDelayed(overlayAnimationTask, 200);

}

};
handler.removeCallbacks(overlayAnimationTask);
handler.postAtTime(overlayAnimationTask, 100);
}



protected void drawMyLocation(Canvas canvas, MapView mapView, Location lastFix, GeoPoint myLocation, long when) {
Log.v(TAG, "draw: " + System.currentTimeMillis());
mapView.getProjection().toPixels(myLocation, point);
rect.left = point.x - slips[currSlip].getIntrinsicWidth() / 2;
rect.top = point.y - slips[currSlip].getIntrinsicHeight() / 2;
rect.right = point.x + slips[currSlip].getIntrinsicWidth() / 2;
rect.bottom = point.y + slips[currSlip].getIntrinsicHeight() / 2;
slips[currSlip].setBounds(rect);
slips[currSlip].draw(canvas);
}
}

此外,您还需要创建 4 个图标并将它们放在 res/drawable 文件夹中,名称为 ic_maps_indicator_current_position_1、ic_maps_indicator_current_position_2、ic_maps_indicator_current_position_3、ic_maps_indicator_current_position_4。你需要自己画它们。

关于android - 关闭 MyLocationOverlay 组件中的自动重新居中功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com