আমার ভেক্টর প্রত্যাশার মতো অঙ্কনযোগ্য স্কেলিং কেন নয়?


98

আমি আমার অ্যান্ড্রয়েড অ্যাপে ভেক্টর ড্রয়াবল ব্যবহার করার চেষ্টা করছি। থেকে http://developer.android.com/training/material/drawables.html (জোর খনি):

অ্যান্ড্রয়েড 5.0 (এপিআই স্তর 21) এবং তারপরে, আপনি ভেক্টর ড্রয়াবল সংজ্ঞা দিতে পারেন, কোন সংজ্ঞা হারানো ছাড়াই স্কেল scale

এই অঙ্কনযোগ্য ব্যবহার:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />

এবং এই চিত্র দেখুন:

<ImageView
    android:layout_width="400dp"
    android:layout_height="400dp"
    android:src="@drawable/icon_bell"/>

400dp এ আইকনটি প্রদর্শনের চেষ্টা করার সময় এই অস্পষ্ট চিত্রটি উত্পন্ন করে (লরিপপ চলমান একটি লম্বা উচ্চ রেজাল্ট সার্কায় 2015 মোবাইল ডিভাইস):

blurryBellIcon

ভেক্টরের অঙ্কনযোগ্য 200 ডিপি হিসাবে সংজ্ঞা প্রস্থ এবং উচ্চতা পরিবর্তন 400dp রেন্ডার আকারে পরিস্থিতি উল্লেখযোগ্যভাবে উন্নতি করে। যাইহোক, এটি একটি টেক্সটভিউ উপাদানটির জন্য অঙ্কনযোগ্য হিসাবে সেট করা (যেমন পাঠ্যের বাম দিকে আইকন) এখন একটি বিশাল আইকন তৈরি করে।

আমার প্রশ্নগুলো:

1) কেন ভেক্টর আঁকতে পারে প্রস্থ / উচ্চতার স্পেসিফিকেশন? আমি ভেবেছিলাম এগুলির পুরো বিন্দুটি হ'ল তারা এটিকে সংজ্ঞা ছাড়াই প্রস্থ এবং উচ্চতাকে অর্থহীন করে স্কেল করে নিচে নামায়?

2) এমন কোনও একক ভেক্টর অঙ্কনযোগ্য যা টেক্সটভিউতে 24 ডিপি অঙ্কনযোগ্য হিসাবে কাজ করে তবে তত বৃহত্তর চিত্রগুলিও ব্যবহার করতে ভাল আঁকতে পারে? উদাহরণস্বরূপ, আমি কীভাবে বিভিন্ন আকারের একাধিক ভেক্টর ড্রয়াবল তৈরি করা এড়াতে পারি এবং এর পরিবর্তে আমার রেন্ডার প্রয়োজনীয়তার জন্য কোন স্কেল ব্যবহার করব?

3) আমি কীভাবে প্রস্থ / উচ্চতার বৈশিষ্ট্যগুলি কার্যকরভাবে ব্যবহার করব এবং ভিউপোর্টউইথ / উচ্চতার সাথে পার্থক্য কী?

অতিরিক্ত তথ্য:

  • ডিভাইসটি এপিআই 22 চালাচ্ছে
  • গ্রেডল সংস্করণ 1.5.0.0 সহ অ্যান্ড্রয়েড স্টুডিও v1.5.1 ব্যবহার করা
  • ম্যানিফেস্টটি সংকলন এবং লক্ষ্য স্তর 23, মিনিট স্তর 15. আমি নূন্যতম স্তরটি 21-এ স্থানান্তরিত করার চেষ্টাও করেছি, তবে এতে কোনও পার্থক্য হয়নি।
  • APK ডিকম্পলিং (কমপক্ষে 21 টি সেট স্তর সহ) অঙ্কনযোগ্য ফোল্ডারে একটি একক এক্সএমএল সংস্থান দেখায়। কোনও রাস্টারযুক্ত চিত্র তৈরি করা হয় না are

শুধু পরিষ্কার হতে। আপনি কি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছেন? অ্যান্ড্রয়েড স্টুডিওর কোন সংস্করণ এবং গ্রেডল প্লাগইনের কোন সংস্করণ? আমি যখন অ্যান্ড্রয়েড স্টুডিওতে অঙ্কনযোগ্য ফোল্ডারটি ডান ক্লিক করি এবং চয়ন New -> Vector Assetকরি তখন এটি আমার অঙ্কনযোগ্য ফোল্ডারে ভেক্টর চিত্র XML টি ফেলে। তবে আমি যদি APK টি তৈরি হয়ে যায় তবে আনপ্যাক করার জন্য যদি আমি apktool ব্যবহার করি তবে আমি দেখতে পাচ্ছি যে এক্সএমএল ফাইলগুলি রয়েছে এবং drawable-anydpi-v21API 21+ ডিভাইসে সঠিকভাবে স্কেল করা হয়েছে। রাস্টার ফাইলগুলি drawable-<mdpi/hdpi/etc>-v4ফোল্ডারগুলিতে স্থাপন করা হয় এবং এপিআই 21+ ডিভাইসে ব্যবহৃত হয় না (তারা সঠিকভাবে স্কেল করে এমন ভিত্তিতে)
কোরি চার্লটন

@ কোরি চার্লটন কৌতুহলী। আমি গ্রেডল ২.০.০ সহ স্টুডিও 1.5.1 ব্যবহার করছি। সর্বনিম্ন স্তরটি 21-এ পরিবর্তন করার পরে, APK এ কেবলমাত্র চিত্রটি প্রদর্শিত হবে সেটি হ'ল drawableফোল্ডার। ভেক্টর অঙ্কনযোগ্য এক্সএমএল ফাইলের প্রস্থ / উচ্চতা 24 ডিপি। 400 ডিপি উচ্চতা / প্রস্থের একটি চিত্রদর্শন নির্দিষ্ট করা নিশ্চিতভাবেই একটি খারাপ স্কেল করা চিত্র তৈরি করছে।
ক্রিস নাইট

এটাই আমি প্রত্যাশা করতাম। আমি শেষ হওয়ার একমাত্র কারণ drawable-anydpi-v21হ'ল আমার minSdkVersion21 বছরেরও কম is আপনি যদি minSdkVersion21 এর চেয়ে কম সেট করেন তবে আচরণে কোনও পরিবর্তন ? এক্সএমএল স্থানান্তর সম্পর্কে কি drawable-anydpi? আমি সেখানে কোনও পরিবর্তন হবে বলে আশা করবো না তবে আমি আপনার ভেক্টর চিত্রটি সঠিকভাবে স্কেলিংয়েরও প্রত্যাশা করব ...
কোরি চার্লটন

মিনিটে 15 মিনিটে সংস্করণ পরিবর্তন করা আপনার মত একই ফলাফল তৈরি করে। drawable-anydpi-v21এমডিআই / এইচডিপিআই / ইত্যাদির বিভিন্ন রাস্টারযুক্ত চিত্র সহ একটি একক এক্সএমএল ফাইল । ফোল্ডার যদিও শেষ রেন্ডার্ড ফলাফলে কোনও পরিবর্তন হয়নি।
ক্রিস নাইট

খুব অদ্ভুত ... আমি আপনার চিত্র ব্যবহার করে আমার একটি অ্যাপ্লিকেশন পরিবর্তন করেছি এবং এটি দুর্দান্ত কাজ করে (আমার সম্পাদিত উত্তর দেখুন)
কোরি চার্লটন

উত্তর:


103

এখানে এই সমস্যা সম্পর্কে নতুন তথ্য আছে:

https://code.google.com/p/android/issues/detail?id=202019

দেখে মনে হচ্ছে এটি ব্যবহার করে android:scaleType="fitXY"এটি ললিপপে সঠিকভাবে স্কেল করবে।

গুগল ইঞ্জিনিয়ারের কাছ থেকে:

হাই, চিত্রটি তীক্ষ্ণ দেখানোর জন্য যদি স্কেলটাইপ = 'ফিটএক্সএইচ' আপনার পক্ষে কার্যকর হতে পারে তবে আমাকে জানতে দিন।

মার্শমেলো বনাম ললিপপ মার্শমেলোতে যুক্ত হওয়া একটি বিশেষ স্কেলিং চিকিত্সার কারণে।

এছাড়াও, আপনার মন্তব্যের জন্য: "সঠিক আচরণ: ভেক্টর অঙ্কনযোগ্য মানসম্পন্ন ক্ষতি ছাড়াই স্কেল করা উচিত So সুতরাং আমরা যদি আমাদের অ্যাপ্লিকেশনে 3 টি বিভিন্ন আকারের একই সম্পদটি ব্যবহার করতে চাই তবে আমাদের সাথে ভেক্টর_ড্রাব্য.এক্সএমএল 3 বার নকল করতে হবে না we হার্ডকোডযুক্ত মাপ। "

যদিও আমি সম্পূর্ণরূপে একমত হই তবে এটি হওয়া উচিত বাস্তবে, অ্যান্ড্রয়েড প্ল্যাটফর্মের এমন পারফরম্যান্স উদ্বেগ রয়েছে যে আমরা এখনও আদর্শ বিশ্বে পৌঁছাতে পারি নি। সুতরাং আপনি যদি একই সাথে স্ক্রিনে 3 টি ভিন্ন আকার আঁকতে চান তবে আরও ভাল পারফরম্যান্সের জন্য 3 টি ভিন্ন ভেক্টর_ড্রেবেবল.এক্সএমএল ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

প্রযুক্তিগত বিবরণটি হ'ল আমরা জটিল পথ রেন্ডারিংকে ক্যাশে করতে হুকের নীচে একটি বিটম্যাপ ব্যবহার করছি, যেমন একটি বিটম্যাপ অঙ্কনযোগ্য পুনরায় আঁকানোর সমতুল্য, আমরা সেরা পুনরায় আঁকার পারফরম্যান্স পেতে পারি।


28
ঠিক আছে গুগল, এটি একেবারে ভয়ানক যে আমাদের একই ধরণের ভিউপোর্ট এবং পাথের সাথে অভিন্ন অঙ্কনযোগ্য অবশ্যই অনুলিপি-পেস্ট করতে হবে which
মিহা_এক্স 64

এটি এটি সেই ডিভাইসে স্থির করে যা আমার লোগোটিকে পিক্সिलेটেড দেখাচ্ছে, কিন্তু অন্য ইউনিটে, যেখানে আগে সবকিছু ঠিক ছিল, এখন এটি ভুল দিক অনুপাত। বুঝতে পারছি না কেন এটি সমস্যা, এটি ভেক্টর! পিক্সেল নয়! : পি
tplive

@ হরিশ জ্ঞানানী, অ্যান্ড্রয়েড: স্কেলটাইপ = "ফিটএক্সওয়াই" সমস্যা সমাধান করে তবে গতিশীল এবং স্কোয়ার আইকনগুলির কী?
মানুয়েলা

29

1) কেন ভেক্টর আঁকতে পারে প্রস্থ / উচ্চতার স্পেসিফিকেশন? আমি ভেবেছিলাম এগুলির পুরো বিন্দুটি হ'ল তারা এটিকে সংজ্ঞা ছাড়াই প্রস্থ এবং উচ্চতাকে অর্থহীন করে স্কেল করে নিচে নামায়?

21-এরও কম এসডিকে সংস্করণগুলির জন্য যেখানে বিল্ড সিস্টেমে রাস্টার চিত্র উত্পন্ন করা প্রয়োজন এবং ক্ষেত্রে আপনি প্রস্থ / উচ্চতা উল্লেখ না করে এমন ক্ষেত্রে ডিফল্ট আকার হিসাবে প্রয়োজন।

2) এমন কোনও একক ভেক্টর অঙ্কনযোগ্য যা টেক্সটভিউতে 24 ডিপি অঙ্কনযোগ্য পাশাপাশি বড় স্ক্রিনের প্রস্থের চিত্রের মতো কাজ করে?

আমি বিশ্বাস করি না যে যদি আপনারও 21-এরও কম এসডিকে টার্গেট করতে হয় তবে এটি সম্ভব।

3) আমি কীভাবে প্রস্থ / উচ্চতার বৈশিষ্ট্যগুলি কার্যকরভাবে ব্যবহার করব এবং ভিউপোর্টউইথ / উচ্চতার সাথে পার্থক্য কী?

ডকুমেন্টেশন: (আসলে এখন খুব দরকারী নয় যে আমি এটি পুনরায় পড়ি ...)

android:width

অঙ্কনযোগ্য এর অভ্যন্তরীণ প্রস্থ নির্ধারণ করতে ব্যবহৃত হয়। এটি সমস্ত ডাইমেনশন ইউনিটকে সমর্থন করে, সাধারণত dp দিয়ে নির্দিষ্ট।

android:height

অভ্যন্তরীণ উচ্চতা অঙ্কনযোগ্য নির্ধারণ করতে ব্যবহৃত হয়। এটি সমস্ত ডাইমেনশন ইউনিটকে সমর্থন করে, সাধারণত dp দিয়ে নির্দিষ্ট।

android:viewportWidth

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

android:viewportHeight

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

আরও ডকুমেন্টেশন:

অ্যানড্রয়েড ৪.৪ (এপিআই স্তর 20) এবং নিম্নতর ভেক্টর ড্রয়াবল সমর্থন করে না। যদি আপনার ন্যূনতম এপিআই স্তরটি এই এপিআই স্তরের যে কোনও একটিতে সেট করা থাকে, তবে ভেক্টর অ্যাসেট স্টুডিওও গ্রেডলকে পশ্চাৎ-সামঞ্জস্যের জন্য ভেক্টর আঁকতে সক্ষম রাস্টার চিত্র উত্পন্ন করতে নির্দেশ দেয়। আপনি Drawableজাভা কোড বা @drawableএক্সএমএল কোড হিসাবে ভেক্টর সম্পদগুলি উল্লেখ করতে পারেন ; আপনার অ্যাপ্লিকেশন চললে, সংশ্লিষ্ট ভেক্টর বা রাস্টার চিত্রটি API স্তরের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে প্রদর্শিত হয় lays


সম্পাদনা: অদ্ভুত কিছু চলছে। এমুলেটর এসডিকে সংস্করণ 23 এ আমার ফলাফল এখানে রয়েছে (ললিপপ + পরীক্ষার ডিভাইস এখনই মারা গেছে ...):

6.x উপর ভাল ঘন্টা

এবং এমুলেটর এসডিকে সংস্করণে 21:

5.x এ ক্রেপি বেলস


4
থ্যাঙ্কস কোরি, আমি সেই ডকুমেন্টেশন দেখেছি এবং এটি খুব দরকারী বলেও খুঁজে পাই নি। আমার ডিভাইসটি ললিপপ (ভি 22) এবং তবুও ভেক্টর ড্রয়িং-এ নির্দিষ্ট 24 ডিপি-র উপরে, উচ্চতা / ওজন হুবহু ইমেজভিউতে নির্দিষ্ট করা হয়েছে কিনা তা নির্বিশেষে আমি গ্রাফিকটি ভালভাবে স্কেল করতে পারছি না। আমি লক্ষ্য এবং সংকলন স্তরের 23 এবং ন্যূনতম স্তরের 21 সহ একটি ম্যানিফেস্ট পরীক্ষা করেছি তবে এটি আঁকারে নিজেই প্রস্থ / উচ্চতা পরিবর্তন না করে আমার ভেক্টর আঁকতে সক্ষম হবে না। আমি সত্যিই একাধিক অঙ্কনযোগ্য তৈরি করতে চাই না যার পার্থক্য কেবল উচ্চতা / প্রস্থ!
ক্রিস নাইট

4
নিশ্চিতকরণের জন্য ধন্যবাদ এবং সত্যই আপনার সাহায্যের প্রশংসা করি। যেমনটি আপনি প্রদর্শন করেছেন, এটি প্রত্যাশা মতো পরিষ্কারভাবে কাজ করা উচিত। আপনার সঠিক কোডটি ব্যবহার করা আমার একই ফলাফল হিসাবে তৈরি করে। হতাশার!
ক্রিস নাইট

4
আপডেট: এপিআই 22 দিয়ে এমুলেটরটির বিপরীতে আমার কোডটি চালান এবং আমি এখনও একই ফলাফল পেতে পারি। আমার কোডটি এমুলেটরের বিপরীতে এপিআই 23 এবং তদা দিয়ে চালান! এটি কাজ করে। দেখে মনে হচ্ছে আপসকলিংটি কেবলমাত্র API 23+ ডিভাইসে কাজ করছে। লক্ষ্য এসডিকে সংস্করণটি পরিবর্তনের চেষ্টা করা হয়েছে তবে এতে কোনও ত্রুটি হয়নি।
ক্রিস নাইট

আপনি কি এই সমস্যার সমাধান খুঁজে পেয়েছেন?
dazza5000

@corycharlton এটা মুছে ফেলার জন্য ঠিক আছে width height viewport heightএবং widthথেকে xml?
VINNUSAURUS

10

অ্যাপকম্প্যাট 23.2 অ্যানড্রয়েড 2.1 এবং তদুর্ধের সমস্ত ডিভাইসের জন্য ভেক্টর ড্রয়াবল প্রবর্তন করে। চিত্রগুলি সঠিকভাবে স্কেল করে, ভেক্টর অঙ্কনযোগ্যের এক্সএমএল ফাইলটিতে নির্দিষ্ট করা প্রস্থ / উচ্চতা নির্বিশেষে। দুর্ভাগ্যক্রমে, এই বাস্তবায়নটি 21 স্তরের এবং ততোধিক স্তরের (নেটিভ প্রয়োগের পক্ষে) ব্যবহৃত হয় না।

সুসংবাদটি হ'ল আমরা অ্যাপকম্প্যাটকে 21 এবং 22 টি স্তরের প্রয়োগটি প্রয়োগ করতে বাধ্য করতে পারি The খারাপ খবরটি হ'ল এটি করার জন্য আমাদের প্রতিচ্ছবি ব্যবহার করতে হবে।

প্রথমত, আপনি অ্যাপকম্প্যাট এর সর্বশেষ সংস্করণটি ব্যবহার করছেন এবং আপনি নতুন ভেক্টর বাস্তবায়ন সক্ষম করেছেন তা নিশ্চিত করুন:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
    compile 'com.android.support:appcompat-v7:23.2.0'
}

তারপরে, useCompatVectorIfNeeded();আপনার আবেদনের অনক্রিট () এ কল করুন:

private void useCompatVectorIfNeeded() {
    int sdkInt = Build.VERSION.SDK_INT;
    if (sdkInt == 21 || sdkInt == 22) { //vector drawables scale correctly in API level 23
        try {
            AppCompatDrawableManager drawableManager = AppCompatDrawableManager.get();
            Class<?> inflateDelegateClass = Class.forName("android.support.v7.widget.AppCompatDrawableManager$InflateDelegate");
            Class<?> vdcInflateDelegateClass = Class.forName("android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate");

            Constructor<?> constructor = vdcInflateDelegateClass.getDeclaredConstructor();
            constructor.setAccessible(true);
            Object vdcInflateDelegate = constructor.newInstance();

            Class<?> args[] = {String.class, inflateDelegateClass};
            Method addDelegate = AppCompatDrawableManager.class.getDeclaredMethod("addDelegate", args);
            addDelegate.setAccessible(true);
            addDelegate.invoke(drawableManager, "vector", vdcInflateDelegate);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

অবশেষে, নিশ্চিত হয়ে নিন যে আপনি নিজের ইমেজভিউয়ের চিত্র সেট করার app:srcCompatপরিবর্তে ব্যবহার করছেন android:src:

<ImageView
    android:layout_width="400dp"
    android:layout_height="400dp"
    app:srcCompat="@drawable/icon_bell"/>

আপনার ভেক্টরের আঁকতে এখন সঠিকভাবে স্কেল করা উচিত!


ভাল পদ্ধতির, তবে, AppCompat 25.4 (এবং সম্ভবত পূর্বে) একটি লিঙ্ক ত্রুটি দেয় "কেবল একই লাইব্রেরি গ্রুপ থেকে কল করা যেতে পারে"। আমি যে বিল্ড সরঞ্জামগুলি ব্যবহার করছি সেগুলি এখনও এটি তৈরি করতে দেয় তবে রানটাইমের পরিণতি আছে কিনা তা নিশ্চিত। প্রায় পরীক্ষা করার কথা।
androidguy

কেবল একই লাইব্রেরি গ্রুপ থেকে কল করা যেতে পারে, এটি যুক্ত করে এই ত্রুটিটি সরিয়ে ফেলুন: lintOptions '' নিষিদ্ধ 'এপিআই অক্ষম করুন}
উসামা

6

1) কেন ভেক্টর আঁকতে পারে প্রস্থ / উচ্চতার স্পেসিফিকেশন? আমি ভেবেছিলাম এগুলির পুরো বিন্দুটি হ'ল তারা এটিকে সংজ্ঞা ছাড়াই প্রস্থ এবং উচ্চতাকে অর্থহীন করে স্কেল করে নিচে নামায়?

আপনি যদি লেআউট ভিউতে এটি সংজ্ঞায়িত না করেন তবে এটি কেবল ভেক্টরের ডিফল্ট আকার। (যেমন আপনি আপনার চিত্রের দৃশ্যের উচ্চতা এবং প্রস্থের জন্য মোড়ানো সামগ্রী ব্যবহার করেন)

2) এমন কোনও একক ভেক্টর অঙ্কনযোগ্য যা টেক্সটভিউতে 24 ডিপি অঙ্কনযোগ্য পাশাপাশি বড় স্ক্রিনের প্রস্থের চিত্রের মতো কাজ করে?

হ্যাঁ, এটি সম্ভব এবং ততক্ষণ চলমান ডিভাইসটি ললিপপ বা তার থেকেও বেশি ব্যবহার করে যতক্ষণ না আবার আকার পরিবর্তন করতে আমার কোনও সমস্যা হয়নি। পূর্ববর্তী এপিআইগুলিতে, আপনি যখন অ্যাপটি তৈরি করেন তখন ভেক্টর বিভিন্ন স্ক্রিন আকারের জন্য পিএনজিতে রূপান্তরিত হয়।

3) আমি কীভাবে প্রস্থ / উচ্চতার বৈশিষ্ট্যগুলি কার্যকরভাবে ব্যবহার করব এবং ভিউপোর্টউইথ / উচ্চতার সাথে পার্থক্য কী?

এটি আপনার ভেক্টরের চারপাশের স্থান কীভাবে ব্যবহৃত হয় তা প্রভাবিত করে। উদাহরণস্বরূপ, আপনি এটি ভিউপোর্টের অভ্যন্তরে ভ্যাক্টরের "মাধ্যাকর্ষণ" পরিবর্তন করতে, ভেক্টরটির ডিফল্ট মার্জিন তৈরি করতে, ভেক্টরের কিছু অংশ ভিউপোর্টের বাইরে রেখে দিতে পারেন ... সাধারণভাবে, আপনি কেবল সেগুলি সেট করে রেখেছেন আকার।


ধন্যবাদ আমিরা আপনি কীভাবে একই অঙ্কনযোগ্য ব্যবহার করে একাধিক রেন্ডার আকারগুলি অর্জন করেছেন তাতে আমি আগ্রহী একটি 24 ডিপি অঙ্কনযোগ্য (পরীক্ষার উদ্দেশ্যে) ব্যবহার করে আমি আমার ইমেজভিউটি 400 ডিপি প্রস্থের নির্দিষ্ট প্রস্থ এবং উচ্চতাতে পরিবর্তন করেছি এবং আমার ললিপপ ডিভাইসে চালিত করেছি (ভি 22) তবে এটি এখনও ভেক্টর চিত্রের পরিবর্তে একটি উত্সর্গীকৃত চিত্রের মতো খারাপভাবে উপস্থাপন করছে। লক্ষ্যমাত্রা আছে এবং v23 এবং ন্যূনতম সংস্করণ 21 এর সাথে সংকলন করতে আমার প্রকাশ্যটিও পরিবর্তন করেছে changed কোনও পার্থক্য নেই।
ক্রিস নাইট

এই ক্ষেত্রে আপনাকে কেবল আপনার ভেক্টর আঁকতে সক্ষম আকারের বৃহত্তম আকারটি ব্যবহার করতে হবে এবং তারপরে আপনার পাঠ্য দৃশ্যে 24 ডিপি আকার নির্দিষ্ট করতে হবে।
আমিরুয়া

আমি এখন দেখতে পেয়েছি যে আপনি যখন ভেক্টর অঙ্কনযোগ্য এবং ললিপপের লেআউটের আকারের মধ্যে খুব বড় পার্থক্য নিয়ে বড় হন তখন আপনি অস্পষ্ট চিত্রগুলি পান। তবে এটি এখনও অনেক বেশি ঝরঝরে বিভিন্ন পর্দার আকারের জন্য গুচ্ছ ফাইল রাখার চেয়ে বৃহত্তম আকার নির্ধারণ করছে;)।
এমিরুয়া

4

আমি আমার সমস্যাটি সমাধান করে কেবল ভেক্টর চিত্রের আকার পরিবর্তন করি। প্রথম থেকেই এটি ছিল রিসোর্সের মতো:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="300"
    android:viewportWidth="300">

এবং আমি এটিকে 150 ডিপি (এই ভেক্টর রিসোর্সের সাথে লেআউটে চিত্রমাপের আকার) এ পরিবর্তন করেছি:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="150dp"
    android:height="150dp"
    android:viewportHeight="300"
    android:viewportWidth="300">

এটা আমার জন্য কাজ করছে।


ধন্যবাদ, এটি আমার ট্যাবলেটে সমস্যাটি সমাধান করার পক্ষে এটি পিক্সেলযুক্ত উপস্থিত appeared
ব্যবহারকারী 2342558

3

আমি এই উপায়গুলি অবশ্যই চেষ্টা করেছিলাম কিন্তু দুর্ভাগ্যক্রমে, তাদের কোনওটিই কাজ করেনি। আমি চেষ্টা fitXYমধ্যে ImageView, আমি ব্যবহার করার চেষ্টা করুন app:srcCompatকিন্তু এটি ব্যবহার করতে পারবেন না। তবে আমি একটি কৌশল খুঁজে পেয়েছি:

backgroundআপনার এর মধ্যে অঙ্কনযোগ্য সেট করুন ImageView

তবে এই পথের বিন্দু হল ভিউজের মাত্রা। আপনার যদি ImageViewভুল মাত্রা থাকে তবে আঁকতে পারে স্ট্রেচ। আপনাকে অবশ্যই প্রাক-ললিপপ সংস্করণগুলিতে এটি নিয়ন্ত্রণ করতে হবে বা কিছু দর্শন ব্যবহার করা উচিতPercentRelativeLayout

আশা করি এটি সহায়ক।


2

প্রথম : এসবিজি অঙ্কনযোগ্যতে আমদানি করুন: (( https://www.learn2crack.com/2016/02/android-studio-svg.html ))

অঙ্কনযোগ্য ফোল্ডারে 1-রাইট ক্লিক করুন নতুন -> ভেক্টর সম্পদ নির্বাচন করুন

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

2- ভেক্টর অ্যাসেট স্টুডিও আপনাকে ইনবিল্ট ম্যাটেরিয়াল আইকন বা আপনার নিজস্ব স্থানীয় এসভিজি ফাইল নির্বাচন করার বিকল্প সরবরাহ করে। প্রয়োজনে আপনি ডিফল্ট আকারটি ওভাররাইড করতে পারেন।

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

দ্বিতীয় : যদি আপনি অ্যান্ড্রয়েড এপিআই 7+ এর সমর্থন চান তবে আপনাকে অ্যান্ড্রয়েড সমর্থন লাইব্রেরি অ্যাকার্ডিং ব্যবহার করতে হবে ( https://stackoverflow.com/a/44713221/1140304 ))

1- অ্যাড

vectorDrawables.useSupportLibrary = true

আপনার বিল্ড.gradle ফাইল।

আপনার লেআউটে নেমস্পেসে 2 টি ব্যবহার করুন যাতে চিত্র ভিউ রয়েছে:

xmlns:app="http://schemas.android.com/apk/res-auto"

তৃতীয় : অ্যান্ড্রয়েডের সাথে ইমেজভিউ সেট করুন: স্কেলটাইপ = "ফিটএক্সওয়াই" এবং অ্যাপ্লিকেশনটি ব্যবহার করুন: এসআরসিকম্প্যাট

 <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        app:srcCompat="@drawable/ic_menu" />

চতুর্থ : আপনি যদি জাভা কোডে এসভিজি সেট করতে চান তবে আপনাকে oncreate methoed এর নিচে লাইন যুক্ত করতে হবে

 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

আপনার সমাধানটি 21 এবং ততোধিকের API এ কাজ করে? ব্যবহারকারী3210008 উপরের উল্লেখ করেছে যে বাস্তবায়নগুলি 21 এবং ততোধিকের API এ ব্যবহৃত হয় না।
এজেডাব্লু

2

আমার জন্য যে কারণে ভেক্টরগুলিকে পিএনজি রূপান্তরিত করতে হয়েছিল তা android:fillType="evenodd"আমার ভেক্টর অঙ্কনযোগ্য in আমি যখন আমার আঁকারে এই বৈশিষ্ট্যের সমস্ত উপস্থিতি সরিয়ে ফেললাম ( ততক্ষণেnonzero ভেক্টরটির জন্য ডিফল্ট ভরাট টাইপ প্রয়োগ করা হয়েছে), পরের বার অ্যাপটি তৈরি করার সময় সবকিছু ঠিক ছিল।

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