【问题标题】:Android Google Map - display line above markersAndroid Google Map - 在标记上方显示线
【发布时间】:2015-09-30 17:10:06
【问题描述】:

根据折线文档;

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline

折线可以有一个 z-index 来影响它们相对于其他形状的高度,但不影响标记。标记的显示级别高于所有形状。因此,要在地图上的标记上方显示一条线,我是否必须完全放弃折线,并将 Canvas 放在 FrameLayout 上并自己处理线的绘制?还是有更简单的方法?

【问题讨论】:

  • 我认为您不能在任何marker 上方显示polyline,即使您将zIndex 设置为一个很大的数字。我认为您可以使用fromScreenLocation 方法将标记的位置转换为屏幕位置,然后您可以在设备屏幕的两个不同位置之间画一条线。
  • 这基本上是我想出的后备位置吗?在地图上放另一个透明视图,然后自己在上面画?这可能会使事情复杂化,因为我需要弄清楚这条线经过哪些标记附近,但我可以弄清楚那部分。
  • 是的,fromScreenLocation 可以帮助您将标记位置转换为屏幕位置。

标签: android google-maps


【解决方案1】:

对于其他尝试这样做的人,我创建了一个扩展 FrameLayout 并实现 View.OnTouchListener 的类。这是关键部分:

@Override
    public void onDraw(Canvas canvas) {
        Path path = null;
        for (Point point : points) {
            if(path == null){
                path = new Path();
                path.moveTo(point.x, point.y);
            }
            else {
                path.lineTo(point.x,point.y);
            }
        }

        if(path != null) {
            canvas.drawPath(path, paint);
        }
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {

        if(event.getAction() == MotionEvent.ACTION_UP){
            callback.complete(points,null);
            return true;
        }

        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        //Log.d(TAG, "point: " + point);
        return true;
    }

onTouch 捕获触摸事件,invalidate() 触发 onDraw 画线。将其中之一添加到您的布局中(我是在 Java 中完成的),然后您可以在地图的标记上进行绘制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多