2012-11-10 4 views
0

내 앱에 MapView가 있습니다. 약간의 드로어 블 마크가있는 오버레이 아이템이 많이 있습니다.MapView의 줌 및 온 탭이 혼합되어 어떻게 해결할 수 있습니까?

오버레이 항목을 터치하면 onTap() 메서드가 실행되고 작은 대화 상자가 표시됩니다. 좋은 작품이지만, 때로는 멀티 터치로 확대하려고 할 때 손가락이 오버레이 아이템의 꼭대기에 오르면 줌이 끝난 후에 대화 상자가 나타납니다. 확대 한 후에 다가올 대화 상자를 닫아야하므로 인체 공학적이지 않기 때문에 다소 버그가 있습니다.

이 이벤트에서 내 앱을 어떻게 막아야합니까? 나는 인스턴트 메신저 할 때 onTap()을 실행하고 싶지 않습니다.

나는 작동하지 onTouch 이벤트와 2 부울로하지만 그것을 시도 :

@Override 
    public boolean onTouchEvent(MotionEvent event, MapView mapView) { 

     int action = event.getAction() & MotionEvent.ACTION_MASK; 

     switch (action) { 
       case MotionEvent.ACTION_DOWN: { 
        actionIsDown= true; 
        break; 
       } 

       case MotionEvent.ACTION_POINTER_DOWN: { 

        pointerIsDown=true; 
         break; 
       } 
       case MotionEvent.ACTION_POINTER_UP: { 

        pointerIsDown= false; 
         break; 
       } 
       case MotionEvent.ACTION_UP: { 

        actionIsDown= false; 
         break; 
       } 
     } 


     return super.onTouchEvent(event, mapView); 
    } 

그리고 ONTAP :

@Override 
    protected boolean onTap(int index) 
    { 



      if(pointerIsDown==false && actionIsDown==false){ //...dialog here 

어떤 아이디어?

답변

2

귀하의 코드는 onTap()이 발사되기 때문에 MotionEvent.ACTION_POINTER_UP 또는 MotionEvent.ACTION_UP가 발생했을 때 작동하지 MotionEvent.ACTION_POINTER_DOWN 또는 MotionEvent.ACTION_DOWN되지 않습니다.

올바르게 테스트하려면 이동을 사용하여지도를 확대/축소 한 다음 UP 동작을 확인한 다음 부울에 저장해야합니다.

예제 코드 :

Geopoint center = new Geopoint(0,0); 
Boolean ignoreTap = false; 

@Override 
public boolean onTouchEvent(MotionEvent event, MapView mapView) { 

    int action = event.getAction() & MotionEvent.ACTION_MASK; 

    switch (action) { 
      case MotionEvent.ACTION_POINTER_DOWN: { 
      case MotionEvent.ACTION_DOWN: { 
       center = mapView.getMapCenter(); 
       ignoreTap = false; 
       break; 
      } 

      case MotionEvent.ACTION_UP: { 
      case MotionEvent.ACTION_POINTER_UP: { 
        if(center != mapView.getMapCenter()) 
        ignoreTap = true; 
        break; 
      } 
    } 
    return super.onTouchEvent(event, mapView); 
} 

onTap()의 :

@Override 
protected boolean onTap(int index) 
{ 
     if(!ignoreTap){ //...dialog here 

Note: 미안은 멀티 터치 줌은 손가락 사이에있는지도 포인트를 arround 작품으로, 줌을 테스트하는지도 센터를 사용하여 센터를 클릭하면 확대/축소시 중심 변경이 발생합니다. 당신은 또한지도 경도 범위를 사용합니다.

+0

내가 초보자가하는 실수. 백만 명의 고마워! –

+0

당신은 환영합니다 :-) – Luis