অ্যান্ড্রয়েড - কেবল শীর্ষে গোলাকার কোণগুলির সাথে অঙ্কনযোগ্য


151

ব্যাকগ্রাউন্ড হিসাবে গোলাকৃত আয়তক্ষেত্রটি ধারণ করার জন্য আমার এই ছবিটি আকর্ষণীয় ছিল:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:radius="6dp" />
</shape>

এটি প্রত্যাশিত হিসাবে ঠিকঠাক কাজ করছে।

এখন, আমি এটি কেবল শীর্ষ কোণগুলিতে গোল করতে চাই, তাই আমি এটিকে এটিতে পরিবর্তন করব:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
             android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>

তবে এখন কোনও কোণটি বৃত্তাকার নয় এবং আমি একটি সরল আয়তক্ষেত্র পেয়েছি। আমি এখানে কি মিস করছি?


এটি আসলেই কোনও সমাধান নয় তবে আমি মনে করি আমার একবার একই সমস্যা হয়েছিল। স্টোক 2 পিক্সেল বাড়ানো সাহায্য করেছে, কিন্তু আপনি জানেন যে এটি কোনও সমাধান নয়।
কোড কবি

আকৃতির কোণগুলির সাথে এখানে একটি সমস্যা রয়েছে: কোড. google.com/p/android/issues/detail?id=939
Knickedi

উত্তর:


303

এই মানগুলি দেওয়ার চেষ্টা করুন:

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

আমি পরিবর্তিত 0dpহয়েছে নোট করুন 0.1dp

সম্পাদনা: ক্লিনার সংস্করণের জন্য নীচে আলেক্স জি মন্তব্য দেখুন


131
এটি আরও অন্বেষণ করে আমি আরও একটি ভাল সমাধান পেয়েছি: <corners android:radius="1dp" android:topLeftRadius="6dp" android:topRightRadius="6dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>- এটি গোলাকার এমনকি কোনও ইঙ্গিত ছাড়াই নিখুঁত বর্গাকার নীচের কোণগুলি উত্পাদন করে। তবে আপনার সমাধানটি বেশ কাজ করে।
আলেক্স জি

এটি কোডে কীভাবে করবেন, একটি বিটম্যাপ দেওয়া আছে? এবং কীভাবে এর চারপাশে রূপরেখা (একে স্ট্রোক) যুক্ত করবেন?
অ্যান্ড্রয়েড বিকাশকারী

@ আলেকস জি আমি দেখতে পাচ্ছি না যে এটি নির্দিষ্ট করা দরকারandroid:radius="1dp"
এইচএম্যাক

@ hmac এটি প্রয়োজনীয়। ডকুমেন্টেশন পড়ুন, এটি এটি পরিষ্কার করে দেয়।
আলেকস জি

@ অ্যালেক্সজি হ্যাঁ ডকুমেন্টেশনটি ভুল, স্যামসাং 10, অ্যান্ড্রয়েড 9-তে পরীক্ষা করে: "প্রতিটি কোণে অবশ্যই প্রথম দিকে (1) এর চেয়ে বেশি কোণার ব্যাসার্ধ সরবরাহ করা উচিত, অন্যথায় কোনও কোণটি বৃত্তাকার নয় you আপনি যদি নির্দিষ্ট কোণগুলি বৃত্তাকার না করতে চান তবে একটি ওয়ার্কের চারপাশে অ্যান্ড্রয়েড ব্যবহার করা হয়: 1 এর চেয়ে বেশি ডিফল্ট কোণার ব্যাসার্ধ সেট করতে ব্যাসার্ধ, তবে তারপরে ওভাররাইড "- সত্য নয়, আমি নীচে ডান, উপরের ডানদিকে, উপরে বামটি শূন্য এবং নীচে বাম + Ve এবং নীচে বামটি সঠিকভাবে বাঁকা
এইচএমএক

14

এরকম কিছু করার চেষ্টা করুন:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="-20dp" android:left="-20dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />

            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

দেখে মনে হচ্ছে এটি আয়তক্ষেত্রের বিভিন্ন কোণার ব্যাসার্ধ সেট করা উপযুক্ত নয়। সুতরাং আপনি এই হ্যাক ব্যবহার করতে পারেন।


আমার নিজের উত্তর দেখুন - এটি বিভিন্ন কোণার জন্য পৃথক ব্যাসার্ধ সম্পূর্ণরূপে গ্রহণযোগ্য।
আলেক্স জি

আমি এই পদ্ধতির চেষ্টা করেছি, এটি গ্রহণযোগ্য নয়, আদর্শ বলেছে যে এটি আলাদা আরএসডিউস রাখার জন্য এপাস্টিম্যাটর করে না এবং এটিকে উপেক্ষা করে
বুজলি

11

কোড নীচে আমার ক্ষেত্রে

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

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

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

    </item>
    </layer-list>

1
আপনি যদি ভিউতে প্যাডিং না চান তবে আইটেমের উপরে এবং নীচের বৈশিষ্ট্যগুলির প্রয়োজন হবে না, তবে অন্যথায় এটি কাজ করে।
রোমিনাভ

9

বুসিলির উত্তরের ভিত্তিতে আপনি কীভাবে এটি তৈরি করতে পারেন drawableযে কেবল একটি গোলাকার কোণ রয়েছে (উপরের বাম, এই উদাহরণে):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <!-- A numeric value is specified in "radius" for demonstrative purposes only,
                  it should be @dimen/val_name -->
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
    <item
        android:bottom="10dp"
        android:right="10dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
        </shape>
    </item>
</layer-list>

দয়া করে মনে রাখবেন উপরে drawableহয় না অ্যান্ড্রয়েড স্টুডিও প্রিভিউ (2.0.0p7) সঠিকভাবে দেখানো হয়েছে। যাইহোক এটির পূর্বরূপ দেখতে, অন্য একটি ভিউ তৈরি করুন এবং এটি হিসাবে ব্যবহার করুন android:background="@drawable/..."


6
@ আলেক্সজি - অবশ্যই এটি আজকের মতো প্রাসঙ্গিক (যেমন প্রমাণ হিসাবে - আমার এরকম কিছু দরকার ছিল)। আপনার অবশ্যই জানা উচিত যে কয়েক বছর ধরে কিছু করার কিছু উপায় অবমূল্যায়িত হয়ে যায় এবং আরও আধুনিকগুলির সাথে প্রতিস্থাপনের প্রয়োজন হতে পারে। বুসলি যেমন উল্লেখ করেছেন, আইডিই বিভিন্ন কোণার রেডিআই সংজ্ঞা দেওয়ার সময় অভিযোগ করে, যা বর্তমান পদ্ধতির ক্ষেত্রে এটি নয়। তদ্ব্যতীত, যেহেতু এই প্রশ্নটি Google এ আমার প্রথম হিট ছিল (iirc), তাই এটি আপডেট করার বিষয়টি আমার কাছে বোধগম্য হয়েছিল। যাইহোক, আমি নিশ্চিত এসইও কোডের আরও কয়েকটি কেবি কিছু মনে করবে না ... :)
দেব-আইএল

2

আমি আপনার কোডটি চেষ্টা করেছিলাম এবং শীর্ষ গোলাকার কোণার বোতামটি পেয়েছি। আমি যেমন রঙ @ffffffদিয়েছি এবং স্ট্রোক দিয়েছি #C0C0C0

চেষ্টা

  1. অ্যান্ড্রয়েড দিচ্ছেন: কাজ করছে না, তবে নীচে লেফট্র্যাডিয়াস = "0.1 ডিপি" করুন
  2. কি অঙ্কনযোগ্য এবং এমুলেটারের রেজোলিউশন পরীক্ষা করে দেখুন। আমি রেজ এর অধীনে এবং এটি ব্যবহার করে একটি অঙ্কনযোগ্য ফোল্ডার তৈরি করেছি। (hdpi, mdpi ldpi) আপনার এই এক্সএমএল ফোল্ডারটি রয়েছে। এটি আমার আউটপুট।

এখানে চিত্র বর্ণনা লিখুন


এটি কী অ্যান্ড্রয়েড সংস্করণ? আমার অ্যাপ্লিকেশনটি অবশ্যই 1.6 এ চালানো হবে - এবং এমুলেটরটি 1.6 এর সমস্যা ছিল।
আলেকস জি

1

আপনার এই https://developer.android.com/guide/topics/resources/drawable-resource.html# শ্যাপটি পড়তে হতে পারে

এবং নীচে একটি নোট আছে।

দ্রষ্টব্য প্রতিটি কোণে অবশ্যই 1 টিরও বেশি কোণার ব্যাসার্ধ সরবরাহ করা উচিত, অন্যথায় কোনও কোণ বৃত্তাকার নয়। আপনি যদি নির্দিষ্ট কোণগুলি বৃত্তাকার না করতে চান তবে একটি ওয়ার্ক-এ্যারেড হ'ল অ্যান্ড্রয়েড ব্যবহার করা উচিত: ব্যাসার্ধটি 1 এর চেয়ে বেশি ডিফল্ট কোণার ব্যাসার্ধ সেট করতে হবে, তবে তারপরে শূন্য সরবরাহ করে "সত্যায়িত" মানগুলি দিয়ে প্রতিটি কোণে ওভাররাইড করবে ) যেখানে আপনি গোলাকার কোণগুলি চান না।


1

আঁকতে রাউং_টপ_কর্ন.এসএমএল তৈরি করুন এবং নীচের কোডটি অনুলিপি করুন

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
    android:topLeftRadius="22dp"
    android:topRightRadius="22dp"
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    />
<gradient
    android:angle="180"
    android:startColor="#1d2b32"
    android:centerColor="#465059"
    android:endColor="#687079"
    android:type="linear" />
<padding
    android:left="0dp"
    android:top="0dp"
    android:right="0dp"
    android:bottom="0dp"
    />
<size
    android:width="270dp"
    android:height="60dp"
    /></shape>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.