2012-05-17 3 views
2

Я использую Mapsforge, и у меня есть MapView. Я добавил несколько моментов. Некоторые из точек слишком близки, чтобы пользователь мог щелкнуть их и получить нужное всплывающее окно, даже увеличенное до конца.Android выбирает самые близкие точки в радиусе при длительном нажатии

То, что я хочу сделать, это сделать так, чтобы они могли нажимать на область карты, и появится прокручиваемое диалоговое окно, в котором перечислены точки, расположенные в таких же пикселях, где они долго нажимаются, или что-то в этом роде. Я могу разобраться в диалоговом окне и длительной работе с прессой, но мне любопытно, знает ли кто-нибудь, как фиксировать «точки в пикселях x, где я нажимал», не просматривая базу данных моего приложения и не выполняя расчет на каждую точку, которую я там сохранил? Должен быть какой-то метод mapsforge, который я могу назвать или использовать правильно?

EDIT: Я вернулся к этому недавно и добавил следующий код, чтобы поймать длительные события в прессе, я пытаюсь выяснить способ захвата окружающих точек. Я думаю, что это должно быть основано на том, где эти точки на экране, потому что если я делаю это на основе лат и долго из базы данных, у меня есть другое значение расстояния для каждого уровня масштабирования и т.д.

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); 
} 

ответ

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 и называется вышеупомянутый метод в этом.

Смежные вопросы