2012-01-05 6 views
8

मेरी गतिविधि तैयार होने के बाद मैं myImageView.getImageMatrix() विधि से मूल्य प्राप्त करने का प्रयास कर रहा हूं। मैंने onCreate(), onStart(), onResume() विधियों का उपयोग करने का प्रयास किया लेकिन मुझे प्राप्त मैट्रिक्स डिफ़ॉल्ट है।एंड्रॉइड - क्या गतिविधि के दौरान कोई घटना ट्रिगर होती है .setContentView ने प्रतिपादन समाप्त कर दिया है?

अगर मैं myImageView.getImageMatrix() एक OnClickListener से शुरू हो रहा कहते हैं, के बाद मेरी गतिविधि दिखाई दे रहा है, मैं सही मान मिलता है।


बस और अधिक स्पष्ट होना:

  • बुला getImageMatrix onStart = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}

  • बुला getImageMatrix onClick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}

+0

समस्या यह है कि लेआउट हो जाता है मापा और onResume जब तक गाया नहीं() समाप्त हो गया है। यह प्रश्न देखने के लिए जांचें कि यह कब होता है जब आप अधिसूचित हो सकते हैं: http://stackoverflow.com/questions/7750102/how-to-get-height-and-width-of-button – Flo

+0

इसके लिए धन्यवाद, ऑनविंडो फोकस चेंज कहा जाता है एक बार डेटा वहां होता है, हालांकि इसे प्रत्येक फोकस परिवर्तन पर बुलाया जाता है। मैं एक झंडा जोड़ सकता हूं जो init राज्य को इंगित करेगा लेकिन यह इतना आसान प्रतीत नहीं होता है। मुझे लगता है कि यह अब मेरा समाधान है, कोई विचार? –

उत्तर

15

आप भी इस विधि का प्रयास कर सकते हैं:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView); 
ViewTreeObserver vto = myImageView.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {   
    @Override   
    public void onGlobalLayout() {    
     // do something now when the object is loaded 
     // e.g. find the real size of it etc   
     myImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);   
    }  
}); 
+0

आपका समाधान अभी तक सबसे अच्छा दिखता है, धन्यवाद :) –

+0

removeGlobalOnLayoutListener() अब एसडीके संस्करण से शुरू हो गया है 16 (जेली बीन) removeOnGlobalLayoutListener() का उपयोग किया जाना चाहिए। – flo

0

शायद तुम एक onLayoutChangeListener लेकिन मैं उपयोग कर सकते हैं मुझे यकीन नहीं है।

+0

सुनिश्चित नहीं है, वैसे भी इस वर्ग का उपयोग करने के लिए, एप्लिकेशन को API स्तर "11" या उच्चतर निर्दिष्ट करना होगा। दुर्भाग्य से मेरा मामला नहीं है। –

0

शायद आप एक AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) का उपयोग कर सकते हैं जो मॉनीटर करता है कि ImageView लोड हो गया है (शायद शून्य के बराबर नहीं है)।

आप प्रोग्रेसअपडेट में एक प्रोजेक्ट डायलॉग प्रदर्शित कर सकते हैं और फिर अपना कोड ऑनपोस्टएक्सक्यूट से जारी रख सकते हैं।

+0

धन्यवाद, एक छोटा सा काम लगता है के लिए थोड़ा जटिल लगता है। "दृश्य तैयार होने पर सूचित करें" –

4

मैं 100% नहीं हूं लेकिन मुझे अपने विकास के लिए कुछ ऐसा पता होना चाहिए और मुझे पता चला कि दृश्य लोड होने पर onWindowFocusChanged() को कॉल किया जाता है। मुझे यकीन नहीं है कि क्या आपकी ज़रूरतें पूरी होती हैं या नहीं।

+0

इसके लिए धन्यवाद, ऑनविंडो फोकस चेंज को एक बार डेटा कहा जाता है, हालांकि इसे प्रत्येक फोकस परिवर्तन पर बुलाया जाता है। मैं एक झंडा जोड़ सकता हूं जो init राज्य को इंगित करेगा लेकिन यह इतना आसान प्रतीत नहीं होता है। मुझे लगता है कि यह अब मेरा समाधान है, कोई विचार? –

+0

ओह हाँ क्षमा करें कि इसे जोड़ना भूल गया। मेरे पास एक वैश्विक बुलियन है जिसका उपयोग मैं यह सुनिश्चित करने के लिए करता हूं कि यह फोकस का पहला कॉल बदल गया है और फिर मुझे जो करना है वह करें। मुझे लगता है कि यह आपको उस चीज़ पर निर्भर करता है जो आपको करने की ज़रूरत है, लेकिन अगर आपको स्क्रीन को लोड होने पर पहली बार कुछ एक्सेस करने की आवश्यकता है तो सबसे वैरिएबल कोड नहीं होने पर वैश्विक चर को ठीक करना चाहिए। – MikeIsrael

+0

फिर से धन्यवाद, मैं इसके साथ काम करूंगा;) –