বাম-শীর্ষ বৃত্তাকার কোণ এবং বাম-নীচে বৃত্তাকার কোণ দিয়ে কীভাবে একটি আকার তৈরি করবেন?


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"/> 

আমাকে অ্যান্ড্রয়েড নির্দিষ্ট করতে হবে: বাম-নীচে বৃত্তাকার কোণার জন্য নীচের অংশটি রাইডিয়াস = "2 ডিপি" (এখানে অন্য একটি বাগ)।


4
হ্যাঁ, আমি আপনার শেষ বিবৃতি / বাগটি নিশ্চিত করতে পারি যে বাম / ডান সেখানে স্যুইচ করা আছে। আমি আমার অ্যাপেও একই অভিজ্ঞতা পেয়েছি। (sdk 2.1)। আপনি ইতিমধ্যে এর জন্য b.android.com এ একটি বাগ রিপোর্ট দায়ের করেছেন বা এটি ইতিমধ্যে সেখানে রিপোর্ট করা হয়েছে?
— ম্যাথিয়াস কনরাডেট

4
আমি সবেমাত্র একটি বাগ, কোড . google.com/p/android/issues/detail?id=9161 ফাইল করেছি । দুঃখজনক বিষয়টি হল, তারা বাগটি ঠিক করার পরে, আমাকে আবার আমার কোডটি পরিবর্তন করতে হবে :(
— ব্যবহারকারী 256239

58

যদিও এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে (এটি ত্রুটিটি লেফট্র্যাডিয়াস এবং নীচে রাইটরিডিয়াসকে বিপরীত করার কারণ হিসাবে তৈরি করা হয়েছে), ত্রুটিটি অ্যান্ড্রয়েড 3.1 (এপিআই স্তর 12 - এমুলেটরটিতে পরীক্ষা করা হয়েছে) এ স্থির করা হয়েছে।

সুতরাং আপনার প্ল্যাটফর্মগুলিতে আপনার আঁকাগুলি সঠিক দেখাচ্ছে কিনা তা নিশ্চিত করতে আপনার অ্যাপ্লিকেশনটির পুনরায় / অঙ্কনযোগ্য-ভি 12 ফোল্ডারে আপনার আঁকাগুলির "সংশোধিত" সংস্করণগুলি (যেমন নীচে বাম / ডান রেডিয়াই এক্সএমএলে সঠিক আছে) রাখা উচিত। এইভাবে অ্যান্ড্রয়েড সংস্করণ> = 12 ব্যবহার করে সমস্ত ডিভাইস সঠিক অঙ্কনীয় ফাইলগুলি ব্যবহার করবে, যখন অ্যান্ড্রয়েডের পুরানো সংস্করণ ব্যবহার করা ডিভাইসগুলি "ওয়ার্কআউন্ড" ড্রয়াবল ব্যবহার করবে যা পুনরায় / ড্রয়যোগ্য ফোল্ডারে অবস্থিত।


4
অন্য বিকল্পটি হ'ল একটি ডিফল্ট values/dimens.xmlফাইল যা ইনভার্টেড ডাউন-বাম এবং নীচে_সামগ্রী মানগুলি এবং একটি নতুন values-v12/dimens.xmlফাইল যাতে সঠিক মান থাকে use এইভাবে আপনি অঙ্কনযোগ্য এক্সএমএল ফাইলের কেবল একটি একক সংস্করণ রাখতে পারবেন এবং এপিআই সংস্করণের উপর ভিত্তি করে কেবলমাত্র মাত্রা মানটি অদলবদল করা হবে।
— জো

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" />

এটিই আমি প্রথম চেষ্টা করেছি ... তবে কোনও আশা নেই .... আমি অ্যান্ড্রয়েড ২.২ এ পরীক্ষা করছি ... অন্য কোনও ধারণা ... ধন্যবাদ
— আমির শাহ

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

এই বাগটি এখানে দায়ের করা হয়েছে । এটি এপিআই লেভেলের ১২ এরও কম অ্যান্ড্রয়েড ডিভাইসগুলির একটি বাগ draw এবং একই লেআউটের একটি ভ্রান্ত সংস্করণ (কোণগুলি স্যুইচ / বিপরীত) ডিফল্ট অঙ্কনযোগ্য ফোল্ডারে রাখা হবে যা 12 এরও কম এপিআই স্তরের ডিভাইসগুলির দ্বারা ব্যবহৃত হবে।

উদাহরণস্বরূপ: আমাকে নীচে-ডানদিকে গোলাকার কোণার একটি বোতাম ডিজাইন করতে হয়েছিল।

'অঙ্কনযোগ্য' ফোল্ডারে - বাটন.এক্সএমএল: আমাকে নীচে-বাম কোণটি গোল করে তৈরি করতে হয়েছিল।

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

'অঙ্কনযোগ্য-ভি 12' ফোল্ডারে - বাটন.এক্সএমএল: লেআউটটির সঠিক সংস্করণটি এপিআই স্তর 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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.