Android在长按时选择半径内的最近点

时间:2012-05-17 13:46:50

标签: android maps points

我正在使用Mapsforge而且我有一个MapView我添加了一些要点。有些点太靠近,用户无法点击它们并获得正确的弹出窗口,甚至一直放大。

我想要做的就是让它们可以在地图的某个区域上进行长按,并且会出现一个可滚动的对话框,列出长按的位置或类似内容的x像素内的点。我可以弄清楚对话和长按的东西,但我很好奇是否有人知道如何捕捉“我点击的x像素点内的点”而不通过我的应用程序的数据库并对我保存的每个点运行计算?应该有一些我可以调用或使用的mapforge方法吗?

编辑:我最近回到这里,并添加了以下代码来捕捉长时间的新闻事件,我正试图找出一种方法来抓住周围的点数。我认为它需要基于点在屏幕上的位置,因为如果我基于数据库中的lat和long来做,我必须为每个缩放级别设置不同的距离值等。

boolean ACTION_MOVED = false;
long beginTime;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            beginTime = System.currentTimeMillis();
            ACTION_MOVED = false;
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            ACTION_MOVED = true;
            break;
        }
        case MotionEvent.ACTION_UP: {
            if (System.currentTimeMillis() - beginTime >= ViewConfiguration.getLongPressTimeout())
                if (!ACTION_MOVED) {
                    Toast.makeText(mapActivity, "long Press", Toast.LENGTH_SHORT).show();
                    ACTION_MOVED = false;
                    return true;
                }
            break;
        }
    }

    return view.onTouchEvent(motionEvent);
}

1 个答案:

答案 0 :(得分:0)

由于这已经被观看了几次,我想我应该发布我最终如何使这个工作。我基本上是通过数据库查看每个点是否在我根据测试选择的某个选择区域内:

public static boolean withinSelectionArea(GeoPoint myPointG, GeoPoint dbPointG, Context context) {
    Point myPoint = projection.toPixels(myPointG, null);
    Point dbPoint = projection.toPixels(dbPointG, null);
    float a = dbPoint.x - myPoint.x;
    float b = dbPoint.y - myPoint.y;
    double distance = Math.sqrt(a * a + b * b);
    return distance < context.getResources().getDisplayMetrics().densityDpi / 4;
}

我也覆盖了onLongPress处理程序并调用了上面的方法。