2013-02-11 61 views
8

तो मुझे यकीन नहीं है कि यह एक बग है या नहीं ... शायद हो सकता है या मैं कुछ याद कर सकता हूं।एंड्रॉइड Google मैप्स v2 कैमरा एनीमेशन

वैसे भी यहां Google मानचित्र वी 2 कैमरा नियंत्रण का लिंक है। https://developers.google.com/maps/documentation/android/views#moving_the_camera

मुद्दा:

चेतन एक स्थान पर पहले से ही onFinish फोन नहीं करता है() एनिमेटेड;

को दोहराने के लिए कैसे:

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mLocation.getLatLng(), zoomLevel), 200, new GoogleMap.CancelableCallback() { 

        @Override 
        public void onFinish() { 
         //DO some stuff here! 
        Log.d("animation", "onFinishCalled"); 

        } 

        @Override 
        public void onCancel() { 
        Log.d("animation", "onCancel"); 


        } 
       }); 

यह समस्या अच्छी तरह से के बारे में आ सकता है जब कोई उपयोगकर्ता डबल नल कुछ है जो एक ही एनीमेशन भले ही बीच, onFinish केवल एक सफल एनीमेशन के लिए बुलाया जाएगा एक लंबे समय है कहा जाता है । जब कैमरा पहले से ही तय किया गया है फिनिश विधि नहीं कहा जाएगा!

मैं कैमरे एनीमेशन करने से पहले चेक करने के आसपास जा सकता हूं लेकिन मुझे यह बर्बाद नहीं लगता है।

किसी भी मदद की सराहना की जाएगी। धन्यवाद।

+0

अब तक केवल व्यवहार्य वैकल्पिक कि करने के लिए animateCamera moveCamera बजाय लेकिन BOOOO उपयोग करने के लिए है। –

उत्तर

15

मुझे एक ही समस्या है जब मैं कैमरे को एक ही स्थिति में ले जाना चाहता हूं, यह एक बग की तरह लगता है। भले ही पुरानी और नई स्थिति समान न हो और अंतर इतना छोटा हो, पूर्व: पुरानी स्थिति। अक्षांश = 94.54284009112, नई स्थिति। अक्षांश = 94.54284003451, यह काम नहीं कर रहा है। मेरा समाधान केवल old_position.latitude = new_position.latitude = 94.54 प्राप्त करने के लिए मानों को छोटा करना है, फिर मैं एक परीक्षण करता हूं।

कैमरे को ले जाने के साथ एक और समस्या है और एक ही समय में मानचित्र को स्क्रॉल करें, इसके लिए मैं आगे बढ़ने से पहले स्क्रॉल इशारा अक्षम करता हूं और इसे फिनिश() और ऑनकैंकल() पर सक्षम करता हूं।

आप अपने मानचित्र एनिमेशन के एनिमेशन की अवधि पता है:

public void animateCameraTo(final double lat, final double lng) 
{ 
    _googleMap = getMap(); 
    CameraPosition camPosition = _googleMap.getCameraPosition(); 
    if (!((Math.floor(camPosition.target.latitude * 100)/100) == (Math.floor(lat * 100)/100) && (Math.floor(camPosition.target.longitude * 100)/100) == (Math.floor(lng * 100)/100))) 
    { 
     _googleMap.getUiSettings().setScrollGesturesEnabled(false); 
     _googleMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lng)), new CancelableCallback() 
     { 

      @Override 
      public void onFinish() 
      { 
       _googleMap.getUiSettings().setScrollGesturesEnabled(true); 

      } 

      @Override 
      public void onCancel() 
      { 
       _googleMap.getUiSettings().setAllGesturesEnabled(true); 

      } 
     }); 
    } 

} 

आशा इस मदद करता है)

+2

उचित बिंदु में मदद कर सकते हैं, चारों ओर अच्छा काम, मैं कम से कम 4 दशमलव अंक नीचे जाउंगा! लेट लम्बाई पर 2 दशमलव अभी भी एक बड़ा क्षेत्र है –

+1

निकटतम 100 वें के लिए अक्षांश/लंबे मूल्यों का गोलाकार मनमाने ढंग से मनमाना है और इसके परिणामस्वरूप अलग-अलग व्यवहार होते हैं ज़ूम स्तर। एक बेहतर समाधान द्वारा गोल करने के लिए राशि निर्धारित करने के लिए ज़ूम स्तर शामिल होगा। – Graham

0

मुझे मिला एकमात्र समाधान अपर्याप्त पिक्सेल मान जांच कर रहा है, एक फर्जी (लेकिन बंद) कैमरा अपडेट ऑब्जेक्ट स्थापित करना और एक नेस्टेड एनिमेट कैमरे() को फर्जी कैमराअपडेट का उपयोग करके कॉल करना और फिर एक और कैमरा अपडेट करना() सही कैमरा अद्यतन के साथ पहले ऑनफिश()। मैंने आज Google एमएपी v2 अपडेट स्थापित किया लेकिन इससे मदद नहीं मिली। यह मेरे लिए डिवाइस रोटेशन पर एक समस्या है। मैं बाउंडिंग आयताकार प्रदर्शित कर रहा हूं और सेंट्रॉइड रोटेशन पर नहीं बदलता है, इसलिए एनिमेट कैमरे() काम नहीं करता है और जब डिवाइस घुमाया जाता है तो चयनित आयताकार स्क्रीन से आंशिक रूप से बंद हो सकता है।

क्या आपको अभी तक कोई और समाधान मिला है? धन्यवाद

+0

नहीं, iv एनिमेट करने के बजाए कैमरे को स्थानांतरित करने के लिए ले जाया गया कैमरा जो कि थोड़े बेकार है :( –

+0

एकमात्र विकल्प जिसे मैं सोच सकता हूं (आपके जैसा ही) यह जांचना है कि क्या लैट्लिंग आप एनिमेट कर रहे हैं, एनीमेशन शुरू करने से पहले कैमरा लक्ष्य स्थिति के समान है। यदि यह आपके ऑनलाइन तरीके से किया जाता है। जब आप घूमते हैं तो आपके रीक्ट्स को हटा दिया जा सकता है। इस http://developer.android.com/guide/topics/resources/runtime-changes.html को –

-1

यहाँ एक और वैकल्पिक हल है। तो आप एनीमेशन अवधि की देरी के साथ देरी से चलने योग्य पोस्ट कर सकते हैं + कुछ ऑफसेट और वहां आप जांच सकते हैं कि समाप्त/कैनकल्ड श्रोता कहलाता था या नहीं, यदि आप इसे वहां नहीं ला सकते हैं और अनुचित श्रोता

2

आपका पिक्सेल दूरी की जाँच करनी चाहिए, नहीं भू दूरी:

LatLngBounds myBounds = YOUR_BOUNDS; 
LatLngBounds visibleBounds = map.getProjection().getVisibleRegion().latLngBounds; 
Point myCenter = map.getProjection().toScreenLocation(myBounds.getCenter()); 
Point visibleCenter = map.getProjection().toScreenLocation(visibleBounds.getCenter()); 
int dist = (int) Math.sqrt(Math.pow(myCenter.x - visibleCenter.x, 2) + Math.pow(myCenter.y - visibleCenter.y, 2)); 
if (dist > YOUR_THRESHOLD) { 
    map.animateCamera(CameraUpdateFactory.newLatLngBounds(myBounds, YOUR_PADDING), new GoogleMap.CancelableCallback() { 
     @Override 
     public void onFinish() { 
      // do something 
     } 

     @Override 
     public void onCancel() { 
      // do something 
     } 
    }); 
} else { 
    // do something 
}