স্কেলিং ছাড়াই স্তর-তালিকায় ভেক্টর অঙ্কনযোগ্য কীভাবে কেন্দ্র করবেন


106

আমি ভেক্টরকে স্কেলিং না করে একটিতে VectorDrawableএকটি ব্যবহার করার চেষ্টা করছি LayerList। উদাহরণ স্বরূপ:

<layer-list>
    <item android:drawable="@color/grid_item_activated"/>
    <item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

অঙ্কনযোগ্য ic_check_white_48dpআইডি হিসাবে সংজ্ঞায়িত:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="48dp"
        android:height="48dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FFFFFFFF"
        android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

পছন্দসই প্রভাবটি স্কেল আইকনটিকে স্কেলিং ছাড়াই স্তর অঙ্কনযোগ্য করে কেন্দ্র করে রাখতে হবে। সমস্যাটি হ'ল, উপরের স্তর-তালিকাটি স্তরের আকারের সাথে মানানসই চেক আইকনকে মাপবে।

আমি যদি প্রতিটি ঘনত্বের জন্য PNG- এর সাথে ভেক্টর আঁকতে সক্ষম প্রতিস্থাপন করি এবং স্তর তালিকাটি যেমন পরিবর্তন করি তবে আমি কাঙ্ক্ষিত প্রভাব তৈরি করতে পারি :

<layer-list>
    <item android:drawable="@color/grid_item_activated"/>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/>
    </item>
</layer-list>

এটিকে ব্যবহার করে আমি কি কোনও উপায় করতে পারি VectorDrawable?


11
দেখা যাচ্ছে এটি 21/22 এআইপি-তে কেবল একটি বাগ হতে পারে। আমি মাত্র একটি এপিআই 23 ডিভাইসে পরীক্ষা করেছি এবং ভেক্টর আঁকতে সক্ষম সঠিকভাবে ছিল।
আশুগেস

4
আপনার নিজের প্রশ্নের উত্তর দেওয়া উচিত এবং তা গ্রহণ করা উচিত। এইভাবে এটি আরও দৃশ্যমান এবং প্রশ্নটি উত্তরহীন হিসাবে দেখাবে না।
মার্সিন কোজিস্কি

4
আমি আমার প্রশ্নের উত্তর দেইনি কারণ এপিআই 21/22 তে আমার কী করা উচিত তার উত্তর আমার কাছে এখনও নেই। আমার অস্থায়ী সমাধানটি ছিল ভেক্টরের পরিবর্তে পিএনজি ব্যবহার করা। এখনও ভেক্টরদের কাজ করার উপায় খুঁজে পাওয়ার আশায়।
ashughes

4
আমি এখানে একটি সমস্যা খুলেছি: code.google.com/p/android/issues/detail?id=219600
toobsco42

এটি ইতিমধ্যে এপিআই 23 এ ঠিক করা হয়েছে, তাই আমি অনুমান করছি যে আপনার বাগ রিপোর্টটি ঠিক চিহ্নিত হিসাবে চিহ্নিত করা হবে।
ashughes

উত্তর:


30

স্তরযুক্ত তালিকায় ভেক্টর ড্রয়াবলগুলি কেন্দ্র করার চেষ্টা করেও আমি একই সমস্যায় পড়েছিলাম।

আমার একটি ভারসাম্য রয়েছে, এটি ঠিক একই নয় তবে এটি কাজ করে, আপনাকে পুরো অঙ্কনযোগ্যের জন্য একটি আকার নির্ধারণ করতে হবে এবং ভেক্টর আইটেমটিতে প্যাডিং যুক্ত করতে হবে:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <size android:height="120dp" android:width="120dp"/>
            <solid android:color="@color/grid_item_activated"/>
        </shape>
    </item>
    <item android:top="24dp"
          android:bottom="24dp"
          android:left="24dp"
          android:right="24dp"
          android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

উপরের আকারের আকারটি পুরো অঙ্কনযোগ্য আকারের আকার নির্ধারণ করে, উদাহরণস্বরূপ, 120 ডিপি, দ্বিতীয় আইটেমের প্যাডিং, উদাহরণস্বরূপ 24 ডিপি, ভেক্টর চিত্রকে কেন্দ্র করে।

এটি gravity="center"21 এপ্রিল এবং 22 এ ভেক্টরগুলি ব্যবহারের ব্যবহারের উপায় হিসাবে ব্যবহারের মতো নয়।


4
এটির মতো শোনাচ্ছে যে এটির মধ্যে আপনার কেনার কেন্দ্রিক চেক আঁকতে সক্ষম হওয়া পুরো জায়গাটি পূরণ করার পরিবর্তে আপনাকে অঙ্কনযোগ্যের সঠিক আকার (আকৃতির আকার নির্ধারণের জন্য) জেনে রাখা দরকার।
ashughes

4
আকারটি জানা সম্ভব নয় তবে আপনি এই পদ্ধতির সাহায্যে প্যাডিং পরিবর্তন করতে পারবেন না, আপনি চিত্রদর্শনগুলিতে একে অপরের শীর্ষে আঁকতে পারবেন could আমি উপরে উল্লিখিত হিসাবে gravity="center"এপিআই 21 এবং 22
নিকোলাস টাইলার

এটি ব্যবহার করার সময় কাজ করে না windowBackground। সুস্পষ্ট আকারগুলি এই ক্ষেত্রে কিছুই করে না। এবং এটি কাজ করে না যদি আমি অন্য স্তর তালিকার ভিতরে স্তর তালিকা রাখি।
ভেসেভলড গ্যানিন

20

একই সমস্যা নিয়ে লড়াই করা হয়েছে। এটি সমাধান করার এবং অঙ্কনযোগ্য মাত্রায় স্কেলিংয়ের এড়াতে আমি একমাত্র উপায় হ'ল অঙ্কনীয় আকার নির্ধারণ এবং এটিকে সারিবদ্ধ করার জন্য মাধ্যাকর্ষণ ব্যবহার করা:

<layer-list>
    <item android:drawable="@color/grid_item_activated"/>
     <item
        android:gravity="center"
        android:width="48dp"
        android:height="48dp"
        android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

আশা করি এটা সাহায্য করবে!


35
এটি 21-22 এআইপিআই তে সহায়তা করে না, কারণ widthএপিআই স্তরে এই বৈশিষ্ট্যটি উপলব্ধ নেই। এপিআই 23-এ, এগুলির দরকার নেই, কারণ বাগটি স্থির হয়েছে এবং অঙ্কনযোগ্য আর প্রসারিত হয় না।
ওয়ান্ডারসাবো

4
এটি এপিআই 27 এর জন্য সঠিকভাবে কাজ করে না, চিত্রটি পুরো স্ক্রিনে প্রসারিত
কনস্টান্টিন কনোপকো

10

সম্পাদিত সমাধান যা আপনার স্প্ল্যাশস্ক্রিনকে API21 থেকে API23 সহ সমস্ত API- তে দুর্দান্ত দেখায়

সবার আগে এই নিবন্ধটি পড়ুন এবং একটি স্প্ল্যাশ স্ক্রিন তৈরি করার ভাল উপায় অনুসরণ করুন।

যদি আপনার লোগোটি বিকৃত হয় বা মানানসই হয় না এবং আপনি কেবলমাত্র APIs24 + কে টার্গেট করছেন তবে আপনি কেবল নিজের ভেক্টরকে এটির মতো এক্সএমএল ফাইলে অঙ্কন করতে পারবেন:

<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
    android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
    android:strokeColor="#292929"
    android:strokeWidth="24" />
</vector>

উপরের কোডটিতে আমি একটি অঙ্কনযোগ্যকে উদ্ধার করছি আমি একটি 640x640 ক্যানভাসে 240x240 হতে আঁকলাম। তারপরে আমি এটিকে ঠিক আমার স্প্ল্যাশ স্ক্রিনে আঁকতে সক্ষম করে রেখেছি এবং এটি দুর্দান্ত কাজ করে:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">

<!-- The background color, preferably the same as your normal theme -->
<item>
    <shape>
        <size android:height="120dp" android:width="120dp"/>
        <solid android:color="@android:color/white"/>
    </shape>
</item>

<!-- Your product logo - 144dp color version of your app icon -->
<item
    android:drawable="@drawable/logo_vect"
    android:gravity="center">

</item>
</layer-list>

আমার কোডটি আসলে নীচে কেবলমাত্র ত্রিভুজটি অঙ্কন করছে তবে এখানে আপনি এটি দিয়ে কী অর্জন করতে পারবেন তা দেখুন। বিটম্যাপ ব্যবহার করার সময় আমি যে পিক্সেলিটেড কিনারা পেয়েছিলাম তার বিপরীতে রেজোলিউশন অবশেষে দুর্দান্ত। সুতরাং সব উপায়ে একটি ভেক্টর ড্রয়িং ব্যবহার করুন (সেখানে ভেক্টর নামক একটি সাইট রয়েছে যা আমি বিশেষায়িত সফ্টওয়্যার ডাউনলোডের হোল ছাড়াই খনি তৈরির জন্য ব্যবহার করতাম)।

এটি এডিআই 21-22-23 এও কাজ করতে যাতে সম্পাদনা করুন

যদিও উপরের সমাধানটি API24 চালিত ডিভাইসের জন্য কাজ করে + আমার অ্যাপ্লিকেশনটি এপিআই 22 চালিত একটি ডিভাইস ইনস্টল করার পরে আমি সত্যিই হতাশ হয়েছি। আমি লক্ষ্য করেছি যে স্প্ল্যাশস্ক্রিন আবার পুরো ভিউটি পূরণ করার চেষ্টা করছে এবং ছিঁটে যাওয়ার মতো দেখাচ্ছে। আমার ভ্রুটি আধা দিনের জন্য ছিঁড়ে যাওয়ার পরে অবশেষে নিছক ইচ্ছাশক্তি দ্বারা সমাধান সমাধান করতে বাধ্য করলাম।

আপনাকে স্প্ল্যাশস্ক্রিন এক্সএমএলের মতো ঠিক একটি দ্বিতীয় ফাইল তৈরি করতে হবে (স্প্ল্যাশ_স্ক্রিন.এক্সএমএল বলতে দাও) এবং এটিকে 2 টি ফোল্ডারে অঙ্কনযোগ্য-ভি 22 এবং অঙ্কনযোগ্য-ভি 21 বলে স্থাপন করতে হবে যা আপনি পুনরায় / ফোল্ডারে তৈরি করবেন (সেগুলি দেখার জন্য) আপনার প্রকল্পের ভিউটি অ্যান্ড্রয়েড থেকে প্রজেক্টে পরিবর্তন করতে হবে)। এটি আপনার ফোনটিকে সেই ফোল্ডারে থাকা ফাইলগুলিতে পুনর্নির্দেশ করতে বলছে যখনই প্রাসঙ্গিক ডিভাইসটি অঙ্কনযোগ্য ফোল্ডারে -vXX প্রত্যয়ের সাথে সম্পর্কিত একটি API চালায়, এই লিঙ্কটি দেখুন । আপনি এই ফোল্ডারগুলিতে তৈরি স্প্ল্যাশ_স্ক্রিন.এক্সএমএল ফাইলের স্তর-তালিকায় নিম্নলিখিত কোডটি রাখুন:

<item>
<shape>
    <size android:height="120dp" android:width="120dp"/>
    <solid android:color="@android:color/white"/>
</shape>
</item>

<!-- Your product logo - 144dp color version of your app icon -->
<item android:gravity="center">
    <bitmap android:gravity="center"
        android:src="logo_vect"/>

</item>

এই ফোল্ডার দেখতে দেখতে

এই API গুলিগুলির জন্য কোনও কারণে আপনাকে এটিকে কাজ করতে এবং চূড়ান্ত ফলাফলটি দেখতে একইরকম দেখতে জেট করার জন্য আপনার অঙ্কনটি একটি বিটম্যাপে গুটিয়ে রাখতে হবে। সমস্যাটি হ'ল আপনাকে অ্যাডিশনাল ড্রয়যোগ্য ফোল্ডারগুলির সাথে অ্যাপ্রোচটি ব্যবহার করতে হবে কারণ স্প্ল্যাশ_স্ক্রিন.এক্সএমএল ফাইলের দ্বিতীয় সংস্করণটি আপনার স্প্ল্যাশ স্ক্রিনটি 23-র বেশি ডিভাইস চলমান ডিভাইসে প্রদর্শিত হবে না lead স্প্র্যাশ_স্ক্রিন.এক্সএমএল এর প্রথম সংস্করণটি অ্যান্ড্রয়েড ডিফল্ট হিসাবে অ্যান্ড্রয়েডের ডিফল্ট হিসাবে অঙ্কনযোগ্য-ভি 24 এ সঞ্চার করতে পারে to

আমার স্প্ল্যাশস্ক্রিন


4

আমি বর্তমানে একটি স্প্ল্যাশ স্ক্রিনে ভেক্টর অঙ্কনযোগ্য অনুভূমিক এবং উল্লম্ব উভয় কেন্দ্রিকের সাথে কাজ করছি। আমি এপিআই 25 স্তরে যা পেয়েছি তা এখানে:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">

<!-- background color, same as theme -->
<item android:drawable="@android:color/white"/>

<!-- app logo -->

<item
    android:drawable="@drawable/my_app_logo"
    android:gravity="center_horizontal|center_vertical"
    android:width="200dp"
    android:height="200dp"
    />
</layer-list>

আপনি যদি ভেক্টর ড্রইবলের মাত্রা সামঞ্জস্য করতে চান তবে উপরের বৈশিষ্ট্যগুলি সংশোধন করুন android:widthএবং android:heightঅ্যাট্রিবিউটগুলি অরিজিনালভাবে মূল অঙ্কনীয়কে পরিবর্তন করতে হবে না।

তদ্ব্যতীত, আমার অভিজ্ঞতাটি ভেক্টরটিকে বিটম্যাপ ট্যাগে অঙ্কনযোগ্য রাখেনি, যা কখনই আমার পক্ষে কাজ করে না। বিটম্যাপটি .png, .jpg এবং .gif ফর্ম্যাট ফাইলের জন্য, ভেক্টর আঁকার জন্য নয়।

রেফারেন্স

https://developer.android.com/guide/topics/resources/drawable-resource#LayerList

https://developer.android.com/guide/topics/resources/more-res્રો.html# মাত্রা


4
ভেক্টর ড্রয়াবল সম্পর্কে ভাল ক্যাচ <বিটম্যাপ> ট্যাগের পরিবর্তে <item> ট্যাগের মধ্যে থাকা দরকার।
ফ্রস্টরোকট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.