ฉันกำลังพยายามใช้ vector drawables ในแอพ Android ของฉัน จากhttp://developer.android.com/training/material/drawables.html (เน้นของฉัน):
ใน Android 5.0 (API ระดับ 21) ขึ้นไปคุณสามารถกำหนด vector drawables ซึ่งปรับขนาดได้โดยไม่สูญเสียความหมาย
ใช้ drawable นี้:
<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 นี้:
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>
สร้างภาพที่พร่ามัวนี้เมื่อพยายามแสดงไอคอนที่ 400dp (บนอุปกรณ์มือถือความละเอียดสูงประมาณปี 2015 ที่ใช้อมยิ้ม)
การเปลี่ยนความกว้างและความสูงในคำจำกัดความของเวกเตอร์ที่วาดได้เป็น 200dp ช่วยปรับปรุงสถานการณ์ได้อย่างมากที่ขนาดการแสดงผล 400dp อย่างไรก็ตามการตั้งค่านี้เป็นแบบวาดได้สำหรับองค์ประกอบ TextView (เช่นไอคอนทางด้านซ้ายของข้อความ) จะสร้างไอคอนขนาดใหญ่
คำถามของฉัน:
1) เหตุใดจึงมีข้อกำหนดความกว้าง / ความสูงในเวกเตอร์ที่วาดได้ ฉันคิดว่าจุดทั้งหมดของสิ่งเหล่านี้คือการขยายขนาดขึ้นและลงโดยไม่สูญเสียทำให้ความกว้างและความสูงไม่มีความหมายในคำจำกัดความ?
2) เป็นไปได้หรือไม่ที่จะใช้เวกเตอร์ที่วาดได้ตัวเดียวซึ่งทำงานเป็น 24dp ที่วาดได้บน TextView แต่ปรับขนาดได้ดีเพื่อใช้ภาพที่ใหญ่กว่าด้วย เช่นฉันจะหลีกเลี่ยงการสร้างเวกเตอร์วาดหลายขนาดที่แตกต่างกันได้อย่างไรและใช้อันที่ปรับขนาดตามความต้องการที่แสดงผลของฉันได้อย่างไร
3) ฉันจะใช้แอตทริบิวต์ width / height ได้อย่างมีประสิทธิภาพอย่างไรและความแตกต่างกับ viewportWidth / Height คืออะไร?
รายละเอียดเพิ่มเติม:
- อุปกรณ์กำลังเรียกใช้ API 22
- ใช้ Android Studio v1.5.1 กับ Gradle เวอร์ชัน 1.5.0
- Manifest เป็นคอมไพล์และกำหนดเป้าหมายระดับ 23 ขั้นต่ำระดับ 15 ฉันได้ลองเลื่อนระดับต่ำสุดไปที่ 21 ด้วย แต่สิ่งนี้ไม่แตกต่าง
- การแยกไฟล์ APK (โดยตั้งค่าระดับต่ำสุดเป็น 21) จะแสดงทรัพยากร XML เดียวในโฟลเดอร์ที่วาดได้ ไม่มีการสร้างภาพแรสเตอร์
New -> Vector Asset
มันจะปล่อย XML ของภาพเวกเตอร์ลงในโฟลเดอร์ที่วาดได้ของฉัน อย่างไรก็ตามหากฉันใช้ apktool เพื่อคลายไฟล์ APK ที่สร้างขึ้นฉันเห็นว่าไฟล์ XML อยู่ในdrawable-anydpi-v21
และปรับขนาดได้อย่างถูกต้องบนอุปกรณ์ API 21+ ไฟล์แรสเตอร์ถูกวางไว้ในdrawable-<mdpi/hdpi/etc>-v4
โฟลเดอร์และไม่ได้ใช้กับอุปกรณ์ API 21+ (ขึ้นอยู่กับความจริงที่ว่ามันปรับขนาดได้อย่างถูกต้อง)