【问题标题】:Change the colors of multiple polylines by OnPolylineClickListener通过 OnPolylineClickListener 改变多条折线的颜色
【发布时间】:2018-06-17 04:55:30
【问题描述】:

我在谷歌地图中有多条折线。当用户单击每条折线时,它必须将其颜色更改为蓝色,而其他折线应为灰色。

我已将折线添加到列表中,如下所示...

polylinePaths = new ArrayList<>();

polylinePaths.add(mMap.addPolyline(polylineOption1));
polylinePaths.add(mMap.addPolyline(polylineOption2));
polylinePaths.add(mMap.addPolyline(polylineOption3));

通过使用 OnPolylineClickListener,我尝试处理每条折线,但无法做到这一点..

mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
    {
        @Override
        public void onPolylineClick(Polyline polyline)
        {

        }
    });

我的方法正确吗?任何人都可以帮助完成这项任务吗?

【问题讨论】:

  • 你在onPolylineClick方法中做了什么?
  • @ZiyaERKOC 当我单击它时,我尝试将折线的颜色更改为蓝色。通过使用polyline.setcolor(Color.BLUE);。但是,第三条折线位于其他折线之上。所以,其他折线颜色隐藏在它下面。我需要在顶部显示选定的折线。(就像在谷歌地图中一样)。

标签: android google-maps onclicklistener google-polyline google-directions-api


【解决方案1】:

您可以使用Polyline.setZindex() 来执行此操作:例如,将 Z-index 设置为 1f 用于未单击的多段线,并将 Z-index 设置为大于 1f(例如 2f)以用于单击。类似的东西:

mGoogleMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
    @Override
    public void onPolylineClick(Polyline polyline) {
        // set settings (color, z-index) for all polylines
        polyline1.setColor(Color.RED);
        polyline1.setZIndex(1f);

        polyline2.setColor(Color.RED);
        polyline2.setZIndex(1f);

        polyline3.setColor(Color.RED);
        polyline3.setZIndex(1f);

        // set settings (color, z-index) for CLICKED polyline
        polyline.setColor(Color.BLUE);
        polyline.setZIndex(2f);
    }
});

polyline1polyline2polyline3 是:

final List<LatLng> poly1Points = new ArrayList<>();
poly1Points.add(new LatLng(-35.27801,149.12958));
poly1Points.add(new LatLng(-35.28032,149.12907));
poly1Points.add(new LatLng(-35.28099,149.12929));
poly1Points.add(new LatLng(-35.28144,149.12984));
poly1Points.add(new LatLng(-35.28194,149.13003));
poly1Points.add(new LatLng(-35.28282,149.12956));
poly1Points.add(new LatLng(-35.28302,149.12881));
poly1Points.add(new LatLng(-35.28473,149.12836));

PolylineOptions polylineOptions1 = new PolylineOptions()
        .addAll(poly1Points)
        .color(Color.RED)
        .width(20);

final List<LatLng> poly2Points = new ArrayList<>();
poly2Points.add(new LatLng(-35.279472, 149.124717));
poly2Points.add(new LatLng(-35.280146, 149.125908));
poly2Points.add(new LatLng(-35.280453, 149.126380));
poly2Points.add(new LatLng(-35.281775, 149.125286));
poly2Points.add(new LatLng(-35.284245, 149.126649));
poly2Points.add(new LatLng(-35.284604, 149.129814));
poly2Points.add(new LatLng(-35.283395, 149.131209));
poly2Points.add(new LatLng(-35.285576, 149.134964));

PolylineOptions polylineOptions2 = new PolylineOptions()
        .addAll(poly2Points)
        .color(Color.RED)
        .width(20);

final List<LatLng> poly3Points = new ArrayList<>();
poly3Points.add(new LatLng(-35.284211, 149.123073));
poly3Points.add(new LatLng(-35.283624, 149.124586));
poly3Points.add(new LatLng(-35.281750, 149.123610));
poly3Points.add(new LatLng(-35.278711, 149.126163));
poly3Points.add(new LatLng(-35.278107, 149.126345));
poly3Points.add(new LatLng(-35.278536, 149.130626));
poly3Points.add(new LatLng(-35.278737, 149.131484));
poly3Points.add(new LatLng(-35.279516, 149.132031));
poly3Points.add(new LatLng(-35.281478, 149.133179));
poly3Points.add(new LatLng(-35.281478, 149.133179));

PolylineOptions polylineOptions3 = new PolylineOptions()
        .addAll(poly3Points)
        .color(Color.RED)
        .width(20);

final Polyline polyline1 = mGoogleMap.addPolyline(polylineOptions1);
polyline1.setClickable(true);

final Polyline polyline2 = mGoogleMap.addPolyline(polylineOptions2);
polyline2.setClickable(true);

final Polyline polyline3 = mGoogleMap.addPolyline(polylineOptions3);
polyline3.setClickable(true);

不要忘记.setClickable(true) 所有折线。结果你应该得到类似的东西(点击的折线是蓝色的并且在顶部):

【讨论】:

  • 它正在工作..!!对折线使用 setZIndex() 是解决此问题的最佳方法。你描述得很好。非常感谢。
  • @Andrri Omelchenko 我需要再澄清一个疑问。我怎么联系你。可以给个邮箱吗?
  • @AngathanNesarasa 在这里提问。
  • 选择每条折线后,我需要在谷歌地图中使用标记仅显示所选折线附近的旅游景点。你能帮忙吗?
  • @AngathanNesarasa 此任务没有“一步”解决方案。可能的方法是这样的:从所选折线的第一个节点到最后一个节点,您应该像this 教程中那样搜索附近的旅游景点。然后对于每个已建立的景点,您应该检查它与折线段的距离以获得更精确的结果。此外,您可能应该对折线节点之间的点执行此操作。所以,试着问问题。我或其他人可以帮助你。
猜你喜欢
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2016-12-12
  • 1970-01-01
  • 2019-12-10
  • 2018-08-25
相关资源
最近更新 更多