2011-01-26 13 views
11

मेरे पास एक गतिविधि में एक नक्शा दृश्य है और यह ठीक काम करता है, नक्शा दिखाता है, और यह नल का जवाब देता है, और मैं आसानी से स्थान निकाल सकता हूं। हालांकि यह हैंडलर चुटकी-ज़ूम का भी जवाब दे रहा है, इसलिए यदि कोई उपयोगकर्ता चुटकी-ज़ूम करने का प्रयास करता है, तो ऐप जवाब देता है जैसे कि उन्होंने टैप किया (और यह उनके लिए बहुत भ्रमित है)।मैं एंड्रॉइड मैप व्यू पर टैप का जवाब कैसे दूं, लेकिन चुटकी-ज़ूम को अनदेखा करूँ?

मैप व्यू पर टैप का जवाब कैसे दे सकता हूं और केवल सिंगल-टैप्स उठा सकता हूं, विशेष रूप से चुटकी-ज़ूम और डबल-टैप्स को अनदेखा कर सकता हूं?

क्या मुझे OnTap() के बजाय OnTouchEvent() का उपयोग करने की आवश्यकता है? यदि ऐसा है तो मैं विभिन्न स्पर्श घटनाओं के बीच अंतर कैसे करूं, और मैं जियोपॉइंट तक कैसे पहुंचूं?

यहाँ मेरी MapActivity अंदर से कोड है:

class MapOverlay extends com.google.android.maps.Overlay 
{ 
    @Override 
    public boolean onTap(GeoPoint p, MapView map) 
    { 
     if (p!=null) 
     { 
      // Do stuff with the geopoint 
      return true;         // We handled the tap 
     } 
     else 
     { 
      return false;        // We didn't handle the tap 
     } 
    } 
} 
+0

आप जब ओवरले आइटम टैप किया जाता है (के रूप में नक्शे पर कहीं भी के खिलाफ), और अभी भी चुटकी की अनदेखी करने के MapView पर एक स्पर्श श्रोता निर्धारित करते हैं, जैसे onTap, जो बनाया गया है का उपयोग करते हुए केवल प्रतिक्रिया करने के लिए रखने के लिए सक्षम हो सकता है यह: http://stackoverflow.com/questions/4626028/how-to-disable-pinch-in-android-mapview –

+0

दिलचस्प रूप से मानचित्र खींचना ठीक है। तो ड्रैग पर टैप नहीं करता है() लेकिन टैप करता है (अपेक्षित के रूप में) लेकिन चुटकी और ज़ूम भी करता है। ऐसा नहीं है कि मैं क्या उम्मीद करूँगा। –

+0

मैं चुटकी और ज़ूम अक्षम नहीं करना चाहता, मैं इसे काम करना चाहता हूं, मैं बस चाहता हूं कि मेरा ऐप ऑनटैप भी उठाए। –

उत्तर

27

ज्यादा सिर scratching और विभिन्न दृष्टिकोण की कोशिश के बाद, यह एक अच्छी तरह से अब तक काम कर रहा है। कोड गति घटनाओं का पालन करता है। जब हमें ACTION_DOWN ईवेंट मिलता है, तो यह isPinch ध्वज को झूठा के रूप में चिह्नित करता है (हम नहीं जानते कि यह एक चुटकी है या नहीं), लेकिन जैसे ही हमें दो अंगुलियों से युक्त एक स्पर्श ईवेंट (यानी ACTION_MOVE) मिलता है, isPinch पर सेट है सच है, और इसलिए जब onTap() घटना आग लगती है, तो यह देख सकता है कि एक चुटकी थी या नहीं।

class MapOverlay extends com.google.android.maps.Overlay 
{ 
private boolean isPinch = false; 

@Override 
public boolean onTap(GeoPoint p, MapView map){ 
    if (isPinch){ 
     return false; 
    }else{ 
     Log.i(TAG,"TAP!"); 
     if (p!=null){ 
      handleGeoPoint(p); 
      return true;   // We handled the tap 
     }else{ 
      return false;   // Null GeoPoint 
     } 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent e, MapView mapView) 
{ 
    int fingers = e.getPointerCount(); 
    if(e.getAction()==MotionEvent.ACTION_DOWN){ 
     isPinch=false; // Touch DOWN, don't know if it's a pinch yet 
    } 
    if(e.getAction()==MotionEvent.ACTION_MOVE && fingers==2){ 
     isPinch=true; // Two fingers, def a pinch 
    } 
    return super.onTouchEvent(e,mapView); 
} 

} 
+0

अद्भुत! ठीक वही जो मेरे द्वारा खोजा जा रहा था। मैं आपको +2 देता हूँ! :) – Kimi

+0

+1 सही, धन्यवाद :) – Dori

+0

धन्यवाद, मुझे यह प्रश्न मिलने से पहले भी मुझे यह पता चला कि मुझे एक ही समस्या थी! समाधान अभी ठीक है =) –

संबंधित मुद्दे