2012-09-04 23 views
7

मैं इस पांच बटनों की तरह कुछ करना चाहता हूं, एक बटन चार अन्य बटनों से घिरा हुआ है। बस इस तरह:घुमावदार बटन

enter image description here

मुझे पता है कि Android के साथ हम केवल इतना वर्ग प्रकार दृश्य हो सकता है कि यह कैसे ऐसा करना संभव हो सकता है? ओपनजीएल या कुछ? किसी के पास कुछ संबंधित लिंक हैं? असल में मैं घुमावदार बटन चाहता हूं जो एक साथ निकट हैं।

उत्तर

3

मेरा अनुमान है कि दिन के अंत में कस्टम दृश्य में ऐसा करना आसान होगा।

लेकिन यदि आप स्टॉक दृश्यों का उपयोग करना चाहते हैं, तो मैं निम्नलिखित का सुझाव दूंगा। सबसे पहले, 2x2 ग्रिड में चार बाहरी बटनों को व्यवस्थित करने के लिए एक रिलेवेटलाइट कंटेनर का उपयोग करें। फिर केंद्र बटन को स्थिति दें ताकि यह केंद्र में ग्रिड को ओवरलैप कर दे। आसपास के बटनों की तुलना में केंद्र बटन को उच्च Z (उपयोगकर्ता के करीब) पर रखें। फिर बटन छवियों के हिस्से के रूप में पारदर्शीता का उपयोग करें ताकि आप उन्हें दिखने के लिए प्राप्त कर सकें। फिर (उम्मीद है) इसे आज़माएं। यदि ज़ेड ऑर्डर सही है, तो केंद्र बटन टैप को कैप्चर करेगा जो अन्यथा चार अन्य बटनों में से किसी एक पर चला जाएगा।

यह वास्तव में काम नहीं करेगा, क्योंकि केंद्र बटन वर्ग आसपास के वर्गों में घुसपैठ करेगा। मुझे नहीं पता कि यह काम करेगा या नहीं, लेकिन फिर आप "बटन" बटन के दूसरे ग्रिड के साथ केंद्र बटन को बदलने का प्रयास कर सकते हैं। ग्रिड में खाली स्थिति होगी, सिवाय इसके कि केंद्र बटन छवि ग्रिड सेल को ओवरलैप करती है। बाहरी बटन छवियों में घुसपैठ से बचने के लिए आपको यह ठीक करना होगा।

संपादित:

यह मेरे लिए हुआ शायद आप TouchDelegate वस्तुओं का एक समूह के साथ ऐसा कर सकता है। जैसा कि मैंने पहले वर्णित किया है, आप बटनों की व्यवस्था करेंगे, लेकिन केवल पैरेंट कंटेनर क्लिक करने योग्य बनाएं। यह पता लगाने के लिए कि कौन सा बटन (यदि कोई है) टैप निर्देशांक के नीचे था, यह पांच TouchDelegate एस का उपयोग करेगा। दुर्भाग्यवश, TouchDelegate केवल Rect हिट क्षेत्रों के साथ काम करते हैं, जो हमें छोड़ देता है जहां हमने शुरू किया। हालांकि, आप source of TouchDelegate को कैनबलाइज़ कर सकते हैं और अपना खुद का संस्करण परिभाषित कर सकते हैं जो कि Rect की बजाय सामान्य प्रकार के सामान्य आकार वर्ग को स्वीकार करता है। (आकृति वर्ग को हिट के परीक्षण के लिए Rect.contains() के बराबर होना होगा। एंड्रॉइड में कुछ भी नहीं बनाया गया है, लेकिन आप आसानी से अपने विशिष्ट वर्गों के लिए अपनी कक्षाएं लिख सकते हैं।)

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

bool insideMyAwsomeShapeButton(int mouse_x,int mouse_y) { 
     if get_image_pixel_color_at_pos(mouse_x,mouse_y) == rgbcolor(1,0,0) 
    { 
      return true; 
    } 

      return false; } 

: छवि है कि आप पोस्ट, बस लाल बटन के खिलाफ पिक्सेल रंग के चेक, जैसे कुछ करने की तरह है, एक पूरी तरह से लाल बटन:

+0

+ यदि वह सर्कल और आर्क के बीच दूरी को * * sqrt (2) - आर के रूप में रखता है, तो केंद्र को अन्य लोगों के लिए नलियां नहीं मिलतीं। कुल मिलाकर ओवरकिल, यद्यपि। – mehmetminanc

+0

हम्म, मैं बटनों को एक साथ बहुत करीब रखना चाहता हूं इसलिए मेरे बीच एक बड़ी दूरी नहीं हो सकती, क्या मुझे 2 डी ग्राफिक्स की तरह कुछ करना होगा? – FabianCook

+0

@SmartLemon - यदि आप कस्टम व्यू रूट पर जाते हैं, तो आप एक [कैनवास] (http://developer.android.com/reference/android/graphics/Canvas.html) ऑब्जेक्ट का उपयोग करेंगे।मैं शुरू करने के लिए [कस्टम व्यू बनाना] (http://developer.android.com/training/custom-views/index.html) पर ट्यूटोरियल का सुझाव देता हूं। मार्गदर्शिका विषय [कस्टम घटक] भी पढ़ें (http://developer.android.com/guide/topics/ui/custom-components.html)। –

1

उदाहरण के लिए आप एक मुखौटा रंग का उपयोग कर सकते सिर्फ एक विचार है, आपको कार्य करने के लिए एंड्रॉइड पर विशिष्ट एपीआई पता लगाना है, जैसे चेक पिक्सेल रंग।

+0

हम्म, ऐसा लगता है कि यह कुछ मूल्यवान है, लेकिन क्या वहां कोई है वर्तमान स्क्रीन की एक छवि बनाने के लिए रास्ता? – FabianCook

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