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


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.