2011-02-15 7 views
8
  1. क्या onDraw() के अंदर invalidate() पर कॉल करने के लिए यह एक अच्छा प्रोग्रामिंग अभ्यास है?

मेरी समझ के अनुसार, invalidate()onDraw() अंदर बुला महंगा है और अगर वहाँ कैनवास में कोई परिवर्तन नहीं है आवश्यकता नहीं है।क्या यह एक अच्छा प्रोग्रामिंग अभ्यास है जिसे अवैध() अंदर डालना है()?

  1. invalidate()onDraw() की एक अतुल्यकालिक संस्करण के बराबर है?

मेरी समझ के अनुसार, वे समकक्ष हैं। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। धन्यवाद।

उत्तर

17

केवल invalidate() फोन यदि आपका डेटा बदल गया है और फिर से ताज़ा करने की आवश्यकता है है। आप आमतौर पर onDraw() में ऐसा नहीं करते हैं, क्योंकि उस बिंदु पर आप अपना वर्तमान डेटा खींच रहे हैं, इसे बदल नहीं रहे हैं।

+0

स्पष्टीकरण के लिए धन्यवाद (कुछ मामलों में जहां आप इस तरह से चल रहा है एनिमेशन के लिए के रूप में यह करने के लिए, चाहते हो सकता है, लेकिन आम तौर पर मैं बजाय अद्यतन के अपने खुद के समय को नियंत्रित करने के लिए एक देरी संदेश का उपयोग कर की सिफारिश करेंगे।)। – hsbgowd

+1

क्या एनीमेशन चलाने पर 'ऑनड्रा()' से 'अमान्य()' को कॉल करने का कोई मौका है (जो मैं करना चाहता हूं) एक स्टैक ओवरफ़्लो का कारण बन सकता है, या रिश्ते अप्रत्यक्ष हो सकता है? –

+0

@AndrewWyld [ExplosionAnimator.draw] देखें (https://github.com/tyrantgit/ExplosionField/blob/master/explosionfield/src/main/java/tyrantgit/explosionfield/ExplosionAnimator.java), विधि ExplosionAnimator.draw होगी View.onDraw द्वारा बुलाया जाता है, और यह सीधे अमान्य() को कॉल करता है। मेरे फोन पर, अमान्य कॉलिंग विस्फोट एनीमेशन को आसान बना देगा। PostInvalidate कभी-कभी एनीमेशन ड्रॉप फ्रेम का कारण बनता है। – Shaw

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