बाएं-ऊपर गोल गोल कोने और बाएं-नीचे गोल कोने के साथ एक आकृति कैसे बनाएं?


84

मैं बाएं शीर्ष गोल कोने और बाएं नीचे गोल कोने के साथ एक आकृति बनाना चाहता हूं:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>    

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
     android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape>

लेकिन ऊपर के आकार ने मुझे वह नहीं दिया जो मैं चाहता हूं। यह मुझे बिना किसी गोल कोनों के एक आयत देता है।

जवाबों:


62

यह एक बग http://code.google.com/p/android/issues/detail?id=939 जैसा दिखता है ।

अंत में मुझे कुछ इस तरह लिखना है:

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

 <corners android:radius="1dp"
  android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
  android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

मुझे android निर्दिष्ट करना है: bottomRightRadius = "2dp" बाएँ-बाएँ गोल कोने के लिए (यहाँ एक और बग)।


1
हां, मैं आपके अंतिम विवरण / बग की पुष्टि कर सकता हूं कि बाएं / दाएं वहां स्विच किया गया है। मैंने अपने ऐप में भी ऐसा ही अनुभव किया। (sdk 2.1)। क्या आपने इसके लिए b.android.com पर एक बग रिपोर्ट दर्ज की है या यह पहले से ही वहां रिपोर्ट की गई है?
मैथियास कॉनरैडट

3
मैंने अभी एक बग दर्ज किया है, code.google.com/p/android/issues/detail?id=9161 । दुखद बात यह है कि बग को ठीक करने के बाद, मुझे अपना कोड फिर से बदलना होगा :(
user256239

58

हालांकि इस सवाल का जवाब पहले ही दिया जा चुका है (यह एक बग है जो बॉटम लाईटराडियस और बॉटम रीट्रेडियस को उलट देता है), बग को एंड्रॉइड 3.1 (एपीआई स्तर 12 - एमुलेटर पर परीक्षण किया गया) में तय किया गया है।

इसलिए यह सुनिश्चित करने के लिए कि सभी प्लेटफ़ॉर्म पर आपकी ड्रॉबल्स सही दिखती हैं, आपको अपने ऐप के रेस / ड्रॉबल-वी 12 फ़ोल्डर में ड्राअबल्स के "सही" संस्करणों (यानी जहाँ नीचे बाएँ / दाएँ रेडी वास्तव में xml में सही हैं) को डालना चाहिए। इस तरह से एंड्रॉइड वर्जन> = 12 का उपयोग करने वाले सभी डिवाइस सही ड्रॉ करने योग्य फ़ाइलों का उपयोग करेंगे, जबकि एंड्रॉइड के पुराने संस्करणों का उपयोग करने वाले डिवाइस "वर्कअराउंड" ड्रॉबल्स का उपयोग करेंगे जो रेस / ड्रॉबल्स फ़ोल्डर में स्थित हैं।


4
एक अन्य विकल्प एक डिफ़ॉल्ट values/dimens.xmlफ़ाइल का उपयोग करना है जिसमें उलटा निचला_ तल और निचला_ ठीक मान और एक नई values-v12/dimens.xmlफ़ाइल है जिसमें सही मान हैं। इस तरह आप ड्रा करने योग्य XML फ़ाइल का केवल एक ही संस्करण रख सकते हैं, और एपीआई संस्करण के आधार पर केवल डिमेन मान को स्वैप किया जाता है।
जो

35

से प्रलेखन :

नोट: हर कोने को (शुरू में) 1 से अधिक कोने वाला त्रिज्या प्रदान किया जाना चाहिए, अन्यथा कोई कोने गोल नहीं होते हैं। यदि आप चाहते हैं कि विशिष्ट कोनों को गोल न किया जाए, तो एंड्रॉइड का उपयोग करने के लिए एक काम के आसपास है: त्रिज्या 1 से अधिक एक डिफ़ॉल्ट कोने त्रिज्या सेट करने के लिए, लेकिन फिर प्रत्येक और हर कोने को उन मूल्यों के साथ ओवरराइड करें जिन्हें आप वास्तव में चाहते हैं, शून्य प्रदान करते हैं ("0dp" ) जहां आप गोल कोनों नहीं चाहते हैं।

उदाहरण के लिए आपको एक सेट android:radius="<bigger than 1dp>"करने में सक्षम होना चाहिए जो आप चाहते हैं:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 

14

आप अपनी त्रिज्या के लिए बहुत कम संख्या का उपयोग कर सकते हैं।

<corners 
  android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
 android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />

यह पहला प्रयास था ... लेकिन मुझे आशा नहीं है .... मैं एंड्रॉइड 2.2 पर परीक्षण कर रहा हूं ... कोई अन्य विचार ... धन्यवाद
आमिर शाह

12

दूसरों के लिए किसी भी एपीआई स्तर के लिए एक समाधान है, आप एक आइटम को एक दूसरे के शीर्ष पर रख सकते हैं:

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

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

हल्के रंग के साथ परिणाम आपको तीन आइटम दिखाने के लिए:

यहाँ छवि विवरण दर्ज करें

अंतिम परिणाम:

यहाँ छवि विवरण दर्ज करें

सादर।


8

यह बग यहां दायर किया गया है । यह 12 से कम एपीआई स्तर वाले एंड्रॉइड डिवाइसों का एक बग है। आपको अपने लेआउट के सही संस्करणों को ड्रा करने योग्य-वी 12 फ़ोल्डर में रखना होगा जो कि एपीआई स्तर 12 या उच्चतर के लिए उपयोग किया जाएगा। और एक ही लेआउट का एक गलत संस्करण (कोनों / उलट) को डिफ़ॉल्ट ड्रॉबल फ़ोल्डर में रखा जाएगा, जिसका उपयोग 12 से कम एपीआई स्तर वाले उपकरणों द्वारा किया जाएगा।

उदाहरण के लिए: मुझे नीचे-दायीं ओर गोल कोने के साथ एक बटन डिजाइन करना था।

'Drawable' फोल्डर में - button.xml: मुझे बॉटम-लेफ्ट कॉर्नर को गोल करना था।

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

'Drawable-v12' फ़ोल्डर में - button.xml: लेआउट के सही संस्करण को एपीआई स्तर 12 या उच्चतर के लिए उपयोग करने के लिए यहां रखा गया था।

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

7

इसे इस्तेमाल करे

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</shape>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.