【问题标题】:Is it possible to show/hide Markers in Android Google maps api v2?是否可以在 Android Google maps api v2 中显示/隐藏标记?
【发布时间】:2013-01-08 14:11:35
【问题描述】:

我想(在我的 Android 应用程序中使用 Google maps api v2)根据类别隐藏或显示我的 GoogleMap 对象上的标记,就像在 google maps web api 中一样,例如:

我有一个包含 50 个标记的 GoogleMap,其中 20 个代表餐馆,20 个代表公共汽车站,10 个是电影院。

是否可以在 Android google maps api v2 上对这些标记进行过滤,例如,如果我们取消勾选复选框,则隐藏所有餐厅标记?

我想做类似的事情,但在我的 Android 设备上使用 google maps api v2:http://www.geocodezip.com/v3_MW_example_categories.html

很抱歉这个基本问题,但我是初学者。

【问题讨论】:

  • 是的,可以隐藏一些标记
  • 嗨 Mitesh,我会在星期一试一试,告诉你是否有效,谢谢 :)
  • 我希望有一种方法可以将不同类别的点添加到不同的叠加层,然后相应地显示/隐藏叠加层。 app v2 中没有这样的 Overlay 概念?

标签: android google-maps-markers google-maps-api-2


【解决方案1】:

试试这个方法。

 Marker restuarantMarkers = gMap.addMarker(new MarkerOptions()
                .position(latlng)
                .title("MyPlace").icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin)).draggable(true));

点击事件

  restuarantMarkers.setVisible(false);

这种方式可以使用循环..

让我知道它是否适合你。

【讨论】:

  • 感谢 Mitesh 的提示,我根据您的回答设法做到了。谢谢你:)
  • @droid_dev: 是否可以将标记引用存储在 arraylist 或 hashmap 中,然后通过 arry 或 hasmap 显示隐藏标记。均值显示包含在一个哈希图中的所有标记
  • @Wikki 是的,可能
  • @droid_dev :我正在寻找有关使用哈希图在谷歌地图 v2 中显示/隐藏特定标记的教程?我在哪里得到链接..谢谢
  • 这还能做什么?
【解决方案2】:

如果您想过滤您的位置,您可以使用对话框。

final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.dialog);
        Button bt_ok = (Button) dialog.findViewById(R.id.button1);
        final CheckBox cb1 = (CheckBox) dialog.findViewById(R.id.checkBox1);
        final CheckBox cb2 = (CheckBox) dialog.findViewById(R.id.checkBox2);
        dialog.setTitle("Category");

        bt_ok.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                mMap.clear();
                if (cb1.isChecked()){
                    mMap.addMarker(new MarkerOptions().position(new LatLng(44.109798, 15.242270)).title("Pin").icon(BitmapDescriptorFactory.fromResource(R.drawable.museum)));
                }
                if (cb2.isChecked()){
                    mMap.addMarker(new MarkerOptions().position(new LatLng(44.209798, 15.392270)).title("Pin 2").icon(BitmapDescriptorFactory.fromResource(R.drawable.restaurants)));
                }
                dialog.dismiss();
            }

        });

        dialog.show();

【讨论】:

    【解决方案3】:

    是的,你可以!这就是如何...

    //mMap 是已经在 else where 初始化的 GoogleMap 的一个实例

    mMap.setOnCameraChangeListener(getCameraChangeListener());
    getCameraChangeListener() 
    public OnCameraChangeListener getCameraChangeListener()
    
    {
    return new OnCameraChangeListener()
    {
        @Override
        public void onCameraChange(CameraPosition position)
    
        {
            addItemsToMap(this.items);
        }
    
    };
    
    }
    

    //你的“Item”类至少需要一个唯一的 id、纬度和经度。

    private void addItemsToMap(List<Item> items)
    {
      if(this.mMap != null)
    
    {
    
        LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;
    
        for(Item item : items)
        {
    
            if(bounds.contains(new LatLng(item.getLatitude(), item.getLongitude()))
    
            {
                if(!courseMarkers.containsKey(item.getId()))
    
                {
    
                    this.courseMarkers.put(item.getId(),     this.mMap.addMarker(getMarkerForItem(item)));
    
                }
    
            }
            else
            {
    
                if(courseMarkers.containsKey(item.getId()))
    
                {
    
                 courseMarkers.get(item.getId()).remove();
                 courseMarkers.remove(item.getId());
    
                }
    
            }
    
        }
    
        }
    
       }
    

    【讨论】:

    • 我不确定复选框的事情,但这是添加和删除标记的代码
    • 您必须使用地理编码找到纬度和经度。 Android中有一个Geocoder类。
    • 嗨Rachel,代码是根据经纬度添加或删除标记,我不需要这个。我想根据类别或描述或标题或类似内容隐藏或显示。
    • 再次感谢 Rachel,但您发布的链接不是针对 Android 的,而是针对 Web 应用程序的 :) 我通过放置您的第二个链接来编辑我的问题。我想使用不在网页中的 Android 谷歌地图来做到这一点:)
    【解决方案4】:

    这里,LocationArray 是位置的 ArrayList,绘制在地图上。我们想显示地图上绘制的所有标记。

     private void FitAllMarkers() {
    
    
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        for (int i = 0; i < LocationArray.size(); i++) {
            builder.include(new LatLng(Double.parseDouble(LocationArray.get(i).getLat()), Double.parseDouble(LocationArray.get(i).getLng())));
    
        }
    
    
        LatLngBounds bounds = builder.build();
        mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多