关于MapView Android Sdk中的地图区域更改

发布于 2024-10-15 02:04:06 字数 105 浏览 3 评论 0原文

我正在 Android 中实现一个基于 Map Kit 的应用程序。我对这个 sdk 很陌生。我的问题是,当地图区域发生变化时,我需要触发一个方法。你们能告诉我当区域改变时是否可以触发一个方法吗?

I am implementing a Map Kit based application in Android. I was very new to this sdk. My problem is that I need to fire a method when the Map Region changed. Can you guys please let me know is it possible to fire a method when the region is changed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

十级心震 2024-10-22 02:04:06

当地图执行平移或缩放方法时,地图区域会发生变化,但您无法从这些方法中获取任何信息,因此您可以通过 onDraw 方法来实现。
要实现此目的,您必须子类化 MapView 并重写 onDraw 方法。

如果这样做,您可以获得限制显示区域的四个坐标,Projection 类检索每个点的坐标(左上[0,0]、右上[宽度-0]、左下[0,高度] 和右下角[宽度,高度] )。

例如,在第一个 onDraw 中:您得到这四个坐标,GeoPoint[4] init
在 onDraw 的第二次运行中,您将获得新的四个坐标,GeoPoint[4] 结束,
所以在这里你可以比较这些地区。

这是一项昂贵的操作,因此延迟机制将有助于减慢更改检测......

the map region will change when the map perform pan or zoom methods but you cannot obtain any info from this methods, so you can doit through the onDraw method.
To achieve this you have to subclass the MapView and overrides the onDraw method.

if you do this you can obtain the four coordinates that limits the region displayed, with Projection class retrieveing coordinates for each point ( top-left[0,0], top-right[width-0], bottom-left[0,height] and bottom-right[width,height] ).

in example, in the first onDraw: you get this four coordinates, GeoPoint[4] init
in the second run of onDraw you get the new four coordinates, GeoPoint[4] end,
so here you can compare the regions.

this is a expensive operation so a delay mechanism will be helpful to slowdown the changes detection...

森末i 2024-10-22 02:04:06

您可以使用 MapView 的 onCameraChange 事件,如下所示:

final Fragment mapFragment = getFragmentManager().findFragmentById(R.id.map); 
mMap =  ((MapFragment)mapFragment).getMap();
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition position) {
        Point point = new Point(mapFragment.getView().getWidth() / 2 , mapFragment.getView().getHeight()/2);
        LatLng l = mMap.getProjection().fromScreenLocation(point);
        Log.v("asd","center lat: " + l.latitude + " center long: " + l.longitude + " ");

    }
});

You can use MapView's onCameraChange event like below:

final Fragment mapFragment = getFragmentManager().findFragmentById(R.id.map); 
mMap =  ((MapFragment)mapFragment).getMap();
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition position) {
        Point point = new Point(mapFragment.getView().getWidth() / 2 , mapFragment.getView().getHeight()/2);
        LatLng l = mMap.getProjection().fromScreenLocation(point);
        Log.v("asd","center lat: " + l.latitude + " center long: " + l.longitude + " ");

    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文