2016-10-21 4 views
7

shape drawable पर stroke के आंशिक ओवरलैपिंग को रोकने का कोई तरीका है। मैं पूरी तरह से आकार की सीमाओं पर स्ट्रोक को ओवरलैप करना पसंद करता हूं।आकार खींचने योग्य स्ट्रोक के आंशिक ओवरलैपिंग को रोकें

यहाँ मेरी एक्सएमएल

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <padding 
     android:bottom="0dp" 
     android:top="0dp" 
     android:left="0dp" 
     android:right="0dp" /> 
    <solid android:color="@color/green" /> 
    <stroke android:color="@color/red_50" 
     android:width="20dp" 
     android:dashGap="2dp" 
     android:dashWidth="10dp" /> 
</shape> 

colors.xml

<color name="green">#0f0</color> 
<color name="red_50">#8f00</color> 

यहाँ है और क्या हासिल की है
Sample Image

आप देख सकते हैं कि स्ट्रोक अतिव्यापी है 50% तक ठोस हिस्सा लेकिन मैं चाहता हूं कि यह 100% हो। आयत के लिए स्ट्रोक और एक के लिए एक -

उत्तर

6

कोशिश दो आकार में विभाजित करने के लिए। इस समाधान में मैं आयत के आकार में हेरफेर करता हूं ताकि मैं सीमाओं के साथ अपना संबंध बदल सकूं।

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

    <item 
     android:bottom="@dimen/offset" 
     android:left="@dimen/offset" 
     android:right="@dimen/offset" 
     android:top="@dimen/offset"> 

     <shape android:shape="rectangle"> 
      <solid android:color="@color/green" /> 
     </shape> 

    </item> 

    <item> 

     <shape android:shape="rectangle"> 
      <stroke 
       android:width="20dp" 
       android:color="@color/red_50" 
       android:dashGap="2dp" 
       android:dashWidth="10dp" /> 
     </shape> 

    </item> 

</layer-list> 

आप समायोजित कर सकते हैं बाहरी या भीतरी स्ट्रोक पाने के लिए ऑफसेट।

Outer & inner stroke

ये मान पारदर्शी आयत (स्ट्रोक परत) और हरी एक के आकार के अंतर से आते हैं। आपके मामले में वे 20dp या कोई नहीं होगा।

+0

यदि बी भरे आयताकार शून्य का पैडिंग नहीं है? चूंकि इसके लिए समायोजन करने के लिए कोई स्ट्रोक नहीं है। –

+0

@EugenPechanec यदि कोई ऑफसेट नहीं है तो हमें परिणाम में दिखाया गया परिणाम मिलता है - हरा आयत स्ट्रोक की चौड़ाई_ के आधे से शुरू होता है। यही कारण है कि हमें इस मूल्य से अपनी सीमाएं बढ़ाना है ('_padding_' घटाकर)। –

+0

लेकिन आपकी पोस्ट का पूरा बिंदु यह है कि हरा आयताकार * कोई स्ट्रोक नहीं है * इसलिए यह पूरे उपलब्ध क्षेत्र को भरता है इसलिए नकारात्मक ऑफसेट की आवश्यकता नहीं है, है ना? (यानी यदि आपको 20 डीपी चौड़े स्ट्रोक के लिए 20 डीपी तक हरे आयत को ऑफसेट करने की आवश्यकता है, तो आपको स्ट्रोक के नीचे हरे रंग को आकर्षित करने के लिए 20-20 = 0 डीपी ऑफसेट की आवश्यकता है।) –

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