2012-05-17 3 views
2

저는 Mapsforge를 사용 중이며 MapView가 있습니다. 몇 가지 점을 추가했습니다. 포인트 중 일부는 너무 가까워서 사용자가 클릭하여 올바른 팝업을 얻을 수 있으며 모든 경우에 확대 할 수 있습니다.안드로이드는 길게 누르기에서 반경 내에서 가장 가까운 점을 선택합니다.

내가하고 싶은 것은지도의 일부를 길게 만들 수 있고, 스크롤 할 수있는 대화 상자에서 길게 누르거나 그와 비슷한 위치의 x 픽셀 안에있는 점을 나열합니다. 대화 상자와 길게 누르는 물건을 알아낼 수는 있지만, 누군가가 내 앱 데이터베이스를 거치지 않고 내가 저장 한 모든 포인트에서 계산을 실행하지 않고 "클릭 한 위치의 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 핸들러를 오버라이드하고 있다는 점에서 위의 방법을했다.

관련 문제