मैं एक दृश्य के ऊपरी बाएँ कोने के निरपेक्ष स्क्रीन पिक्सेल निर्देशांक प्राप्त करने की कोशिश कर रहा हूँ। हालाँकि, सभी विधियाँ मैं ऐसे ढूँढ सकता हूँ getLeft()
और getRight()
काम नहीं कर सकता क्योंकि वे सभी दृश्य के जनक के सापेक्ष प्रतीत होती हैं, इस प्रकार मुझे दे रही हैं 0
। ऐसा करने का उचित तरीका क्या है?
यदि यह मदद करता है, तो यह 'तस्वीर को वापस क्रम में लाने के लिए' खेल के लिए है। मैं चाहता हूं कि उपयोगकर्ता कई टुकड़ों का चयन करने के लिए एक बॉक्स बनाने में सक्षम हो। मेरे इस धारणा है कि करने के लिए है कि क्या करने के लिए सबसे आसान तरीका है getRawX()
और getRawY()
से MotionEvent
और फिर लेआउट टुकड़े धारण के ऊपरी बाएं कोने के खिलाफ उन मूल्यों की तुलना करें। टुकड़ों के आकार को जानने के बाद, मैं यह निर्धारित कर सकता हूं कि कितने टुकड़ों का चयन किया गया है। मुझे लगता है कि मैं उपयोग कर सकता हूं getX()
और getY()
पर MotionEvent
, लेकिन जैसा कि एक सापेक्ष स्थिति देता है जो यह निर्धारित करता है कि कौन से टुकड़े अधिक कठिन चुने गए थे। (असंभव नहीं, मुझे पता है, लेकिन यह अनावश्यक रूप से जटिल लगता है)।
संपादित करें: यह वह कोड है जिसका उपयोग मैंने एक प्रश्न के अनुसार होल्डिंग कंटेनर के आकार को प्राप्त करने के लिए किया था। TableLayout
वह मेज है जो सभी पहेली टुकड़े रखती है।
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
संपादित 2: यहाँ सुझाए गए उत्तरों का अधिक पालन करते हुए कोड मैंने कोशिश की है।
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
यह कोड सभी इनिशियलाइजेशन के होने के बाद जोड़ा गया था। छवि को ImageViews (कक्षों [] सरणी) के एक सरणी में विभाजित किया गया है, जिसमें निहित है a TableLayout
। कक्ष [0] शीर्ष बाएं है ImageView
, और मैंने कोशिकाओं को चुना [4] क्योंकि यह बीच में कहीं है और निश्चित रूप से (0,0) के निर्देशांक नहीं होने चाहिए।
ऊपर दिखाया गया कोड मुझे अभी भी लॉग में सभी 0s देता है, जो मुझे वास्तव में समझ में नहीं आता है क्योंकि विभिन्न पहेली टुकड़े सही ढंग से प्रदर्शित होते हैं। (मैंने टेबल लाइटर कॉर्नर और डिफ़ॉल्ट दृश्यता के लिए सार्वजनिक रूप से प्रयास किया, दोनों एक ही परिणाम दे रहे हैं।)
मुझे नहीं पता कि यह महत्वपूर्ण है, लेकिन ImageView
मूल रूप से एस को आकार नहीं दिया जाता है। ImageView
जब मैं इसे प्रदर्शित करने के लिए एक छवि देता हूं , तो एस का आकार स्वचालित रूप से दृश्य द्वारा आरंभ के दौरान निर्धारित किया जाता है। क्या यह उनके मान 0 में योगदान दे सकता है, भले ही वह लॉगिंग कोड है क्योंकि उन्हें एक छवि दी गई है और स्वचालित रूप से अपने आप को फिर से आकार दिया है? संभावित रूप से काउंटर करने के लिए, मैंने tableLayout.requestLayout()
ऊपर दिखाए अनुसार कोड जोड़ा , लेकिन इससे कोई मदद नहीं मिली।