2012-09-20 35 views
2

這個問題之前已經被問過好幾次了,我已經徹底閱讀並遵循了答案/評論。因此,我可以生成下面的代碼,但代碼只響應onDown(),onShowPress(),onLongPress()。以下是我打算啓用雙擊或雙擊的唯一課程。Android谷歌地圖:雙擊地圖查看

import android.os.Bundle; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnDoubleTapListener; 
import android.view.GestureDetector.OnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 

import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapView; 

public class GoogleAndroidMapsActivity extends MapActivity implements OnGestureListener, OnDoubleTapListener { 

private GestureDetector gestureDetector; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //To allow zooming along with panning around, enable it 
    MapView mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 

    gestureDetector = new GestureDetector(this, this); 
    gestureDetector.setOnDoubleTapListener(this); 

    mapView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }); 
} 

@Override 
protected boolean isRouteDisplayed() { 
    return false; 
} 

@Override 
public boolean onDoubleTap(MotionEvent e) { 
    Log.d("GMaps", "Double Tap"); 
    return true; 
} 

@Override 
public boolean onDoubleTapEvent(MotionEvent e) { 
    Log.d("GMaps", "Double Tap Event"); 
    return true; 
} 

@Override 
public boolean onSingleTapConfirmed(MotionEvent e) { 
    Log.d("GMaps", "Single Tap Confirmed"); 
    return true; 
} 

@Override 
public boolean onDown(MotionEvent e) { 
    Log.d("GMaps", "Down"); 
    return false; 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    Log.d("GMaps", "Fling"); 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent e) { 
    Log.d("GMaps", "Long Press"); 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    Log.d("GMaps", "Scroll"); 
    return false; 
} 

@Override 
public void onShowPress(MotionEvent e) { 
    Log.d("GMaps", "Show Press"); 
} 

@Override 
public boolean onSingleTapUp(MotionEvent e) { 
    Log.d("GMaps", "Single Tap Up"); 
    return false; 
} 
} 

但我不明白爲什麼onDoubleTap()onDoubleTapEvent()永遠不會被調用。實際上唯一被調用的是onDown(),onShowPress(),onLongPress()

我甚至試圖擴展MapView,如下圖所示,然後在我的主類GoogleAndroidMapsActivity.java中使用,但無濟於事。我相應地更改了main.xml以反映AdvMapView.java

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.GestureDetector.OnDoubleTapListener; 
import android.view.GestureDetector.OnGestureListener; 

import com.google.android.maps.MapView; 

public class AdvMapView extends MapView implements OnGestureListener, OnDoubleTapListener{ 

private GestureDetector gestureDetector; 

public AdvMapView(Context context, AttributeSet attrSet) { 
    super(context, attrSet); 
    gestureDetector = new GestureDetector(context, this); 
    gestureDetector.setOnDoubleTapListener(this); 

    this.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    });   
} 

@Override 
public boolean onDoubleTap(MotionEvent e) { 
    Log.d("GMaps", "Double Tap"); 
    return false; 
} 

@Override 
public boolean onDoubleTapEvent(MotionEvent e) { 
    Log.d("GMaps", "Double Tap Event"); 
    return false; 
} 

@Override 
public boolean onSingleTapConfirmed(MotionEvent e) { 
    Log.d("GMaps", "Single Tap Confirmed"); 
    return false; 
} 

@Override 
public boolean onDown(MotionEvent e) { 
    Log.d("GMaps", "Down"); 
    return false; 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    Log.d("GMaps", "Fling"); 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent e) { 
    Log.d("GMaps", "Long Press"); 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    Log.d("GMaps", "Scroll"); 
    return false; 
} 

@Override 
public void onShowPress(MotionEvent e) { 
    Log.d("GMaps", "Show Press"); 
} 

@Override 
public boolean onSingleTapUp(MotionEvent e) { 
    Log.d("GMaps", "Single Tap Up"); 
    return false; 
} 

} 

,然後用在GoogleAndroidMapsActivity作爲

import android.os.Bundle; 
import android.view.GestureDetector; 

import com.google.android.maps.MapActivity; 

public class GoogleAndroidMapsActivity extends MapActivity{ 

private GestureDetector gestureDetector; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //To allow zooming along with panning around, enable it 
    AdvMapView mapView = (AdvMapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 

} 

@Override 
protected boolean isRouteDisplayed() { 
    return false; 
} 

} 

此外,onDown()onShowPress()onLongPress()被調用一次,我第一次單擊/雙擊。當我收到「Down」,「Show Press」&「長按」在我的日誌中,單擊/雙擊不起作用。請幫忙。

回答

0

我做這種方式,只是把這個支架到類主體延伸MapView類

{ 
final GestureDetector gd = new GestureDetector(new SimpleOnGestureListener() { 
    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
    getController().zoomInFixing((int) e.getX(), (int) e.getY()); 
    return true; 
    } 
}); 

this.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    return gd.onTouchEvent(event); 
    } 
}); 
} 
0

我有完全相同的問題。具體而言,我想覆蓋地圖上的默認雙擊(SupportMapFragment)。我解決它的方式(實際上是一種解決方法)是:
我創建了一個framelayout,它填充了與我的地圖片段完全相同的區域,但是它在那之後被完全渲染。

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

<FrameLayout 
    android:id="@+id/fragment_wrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

然後,我添加了一個手勢監聽器 「覆蓋」 fragment_wrapper,我能捕捉到雙擊:

GestureDetector gestureDetector = new GestureDetector(this, new DoubleTapDetector()); 
fragmentWrapper.setOnTouchListener(new OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v,MotionEvent event){ 
     gestureDetector.onTouchEvent(event); 
     return true; 
    } 
}); 

和DoubleTapDetector類:

public class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     Log.d("DoubleTapDetector", "Double Tap!"); 
       //DO ACTIONS HERE 
     return true; 
    } 
}