2012-05-21 15 views
6

में एकाधिक आयतों को चित्रित करना मैं एक एंड्रॉइड एक्सएमएल ड्रायबल में छोटे आयताकारों की 3x3 पंक्ति बनाने का तरीका जानने का प्रयास कर रहा हूं।
यह वास्तव में मेरे पास (2 छोटे rects, लेकिन वे ओवरलैप) हो रही है नहीं:एक एक्सएमएल ड्रायबल

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:left="20dp" android:top="20dp" android:right="25dp" android:bottom="25dp" > 
     <shape android:shape="rectangle"> 
      <stroke android:width="1px" android:color="#fff" /> 
      <solid android:color="#00FF0000" /> 
      <corners android:radius="3dp" /> 
     </shape> 
    </item> 


    <item android:left="30dp" android:top="30dp" android:right="35dp" android:bottom="25dp" > 
    <shape android:shape="rectangle"> 
      <stroke android:width="1px" android:color="#fff" /> 
      <solid android:color="#00FF0000" /> 
      <corners android:radius="3dp" /> 
      <size android:width="10dp" 
        android:height="10dp"/> 
     </shape> 
    </item> 


</layer-list> 

उत्तर

1

कृपया documentation of Layer Lists देखते हैं।

यह स्पष्ट होगा कि top, left, bottom और right मद की ऑफसेट के लिए आयाम में गुण हैं: कितनी दूर स्वयं आइटम सीमा से रखा जाना चाहिए की यह माता-पिता (परत-सूची) है ।

आप जानते हैं कि आपके परत-सूची उच्च कहना 130 डी पी चौड़ा और 130 डी पी है, और आप वहाँ 3x3 आयतों चाहते हैं, की पहली ऑफसेट

top: 10 
left: 10 
bottom: 90 
right: 90 

और अगले के (प्रथम पंक्ति, दूसरे स्तंभ होना चाहिए):

top: 10 
left: 50 
bottom: 90 
right: 50 
+0

और दूसरी पंक्ति शीर्ष: 50 बाईं: 10 नीचे: 50 सही: 90 तीसरा पंक्ति शीर्ष: 90 बाईं: 10 नीचे: 10 सही: 90 – Lunf

6

समस्या का एक हिस्सा यह है कि परत-सूची में अलग-अलग आइटम ड्रायबल के समग्र आकार में स्केल किए जाते हैं। जैसा कि the docs में वर्णित है, आप bitmap ड्रायबल में छोटे वर्गों को लपेटकर इसे प्राप्त कर सकते हैं। ऐसा कुछ काम कर सकता है। सबसे पहले, एक अलग drawable के रूप में बुनियादी आकार को परिभाषित:

drawable/square.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="1px" android:color="#fff" /> 
    <solid android:color="#00FF0000" /> 
    <corners android:radius="3dp" /> 
    <size android:width="10dp" android:height="10dp"/> 
</shape> 

(संपादित करें: यह अच्छा होगा यदि आप ऊपर कर सकता है, लेकिन दुर्भाग्यवश, जैसा कि @ सोमोन कहीं भी एक टिप्पणी में इंगित किया गया है, आप <bitmap> टैग के भीतर से आकृति ड्रॉबल्स को संदर्भित नहीं कर सकते हैं। आपको शेष कार्य के लिए वास्तविक बिटमैप ग्राफ़िक के रूप में स्क्वायर बनाना होगा।)

,

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- first row --> 
    <item android:left="20dp" android:top="20dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="35dp" android:top="20dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="50dp" android:top="20dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 

    <!-- second row --> 
    <item android:left="20dp" android:top="35dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="35dp" android:top="35dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="50dp" android:top="35dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 

    <!-- third row --> 
    <item android:left="20dp" android:top="50dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="35dp" android:top="50dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
    <item android:left="50dp" android:top="50dp"> 
     <bitmap android:src="@drawable/square" android:gravity="top|left" /> 
    </item> 
</layer-list> 

मैं इस परीक्षण नहीं किया तो यह थोड़ा दूर हो सकता है, लेकिन आप इसे बदलाव करने में सक्षम होना चाहिए:

तो फिर तुम एक परत-सूची है कि अलग-अलग वर्गों स्केल नहीं करेगा परिभाषित कर सकते हैं आप जो चाहते हैं उसे प्राप्त करने के लिए। स्केलिंग से छुटकारा पाने के लिए महत्वपूर्ण बात यह है कि।

+0

मुझे पसंद है, जहां इस जा रहा है, लेकिन मेरे प्रदर्शन पर कुछ भी नहीं दिख रहा है। कोई विचार? – WOPR

+0

@ user1059096 - एचएम। मुझे नहीं पता कि यह क्यों काम नहीं कर रहा है। (वास्तव में, एक बड़ी समस्या है: प्रत्येक बार '' टैग प्रकट होता है, यह गलत है। यह होना चाहिए: ''। ' 'ड्रायबल को कच्चे बिटमैप के संदर्भ की आवश्यकता है और मैं इसे' 'ड्रॉ करने योग्य संदर्भित करने के लिए उपयोग करने का प्रयास कर रहा था।) लेकिन उस परिवर्तन के साथ भी, यह काम नहीं करता है (जैसा कि मैंने अभी पुष्टि की है)। जब मैं थोड़ा और समय लेता हूं तो मैं इसे और अधिक देखूंगा। यह बहुत अजीब है। –

+0

** यह काम नहीं करता ** एक बिटमैप एक एक्सएमएल आकार लोड नहीं कर सकता है - इसका परिणाम एक त्रुटि संदेश ' में एक वैध स्रोत विशेषता' की आवश्यकता है। तो ऐसा लगता है कि आकार की परतों से छवि उत्पन्न करने के रूप में बुनियादी कुछ भी संभव नहीं है। –

0

जैसा कि चर्चा पहले से ही पता चला है, बिटमैप का उपयोग करके वास्तविक बिटमैप्स तक सीमित है; अन्य (एक्सएमएल) ड्रॉबल्स का उपयोग यहां नहीं किया जा सकता है।

स्केलड्राउबल्स आपके लिए एक उपयुक्त समाधान होना चाहिए। उन्हें परिणामस्वरूप बाध्यकारी बॉक्स में अपनी स्थिति समायोजित करने के लिए आवश्यक विशेषताओं की पेशकश करनी चाहिए।

हालांकि, स्केलड्राउबल्स इस तथ्य से ग्रस्त हैं कि वे एनिमेशन के लिए हैं। वे 0 के स्तर से शुरू होते हैं, जो उन्हें अदृश्य रूप से छोटा बनाता है। साथ ही, एक्सएमएल में स्तर निर्धारित करना संभव नहीं लगता है।

यदि आप अपने कोड में अपने स्केलड्राबल्स पर एक स्तर सेट करने के साथ रह सकते हैं, तो इसे आज़माएं।

इसके अलावा, this question देखें।

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