แหล่งข้อมูลที่ถอนออกได้

แหล่งข้อมูลที่ถอนออกได้คือแนวคิดทั่วไปของกราฟิกที่สามารถวาดลงบนหน้าจอ คุณสามารถดึงข้อมูลด้วย API เช่น getDrawable(int) หรือใช้ ไปยังทรัพยากร XML อื่นที่มีแอตทริบิวต์ เช่น android:drawable และ android:icon ไอคอนที่ถอนออกได้มีหลายประเภทดังนี้

ไฟล์บิตแมป
ไฟล์กราฟิกบิตแมป (PNG, WEBP, JPG หรือ GIF) สร้าง BitmapDrawable
ไฟล์แพตช์ 9
ไฟล์ PNG ที่มีพื้นที่ยืดหยุ่นเพื่อให้รูปภาพปรับขนาดตามเนื้อหาได้ (.9.png) สร้าง NinePatchDrawable
รายการเลเยอร์
เนื้อหาที่ถอนออกได้ที่จัดการอาร์เรย์ของเนื้อหาที่ถอนออกได้อื่นๆ รูปเหล่านี้วาดตามลำดับอาร์เรย์ ดังนั้น ที่มีดัชนีใหญ่ที่สุดจะถูกวาดไว้ด้านบน สร้าง LayerDrawable
รายชื่อรัฐ
ไฟล์ XML ที่อ้างอิงกราฟิกบิตแมปต่างๆ สถานะต่างๆ เช่น ในการใช้รูปภาพอื่นเมื่อมีการแตะปุ่ม สร้าง StateListDrawable
รายการระดับ
ไฟล์ XML ที่กำหนดรูปแบบที่ถอนออกได้ซึ่งจัดการปุ่มที่ถอนออกได้จำนวนหนึ่ง โดยแต่ละไฟล์ ได้กำหนดค่าตัวเลขสูงสุดไว้ สร้าง LevelListDrawable
การเปลี่ยนที่ถอนออกได้
ไฟล์ XML ที่กำหนดทรัพยากรที่ถอนออกได้ซึ่งสามารถเลือนหายไประหว่างทรัพยากรที่ถอนออกได้ 2 รายการ สร้าง TransitionDrawable
เนื้อหาที่ถอนออกได้
ไฟล์ XML ที่กำหนดโฆษณาที่ถอนออกได้ซึ่งฝังรายการอื่นที่ถอนออกได้ตามระยะทางที่กำหนด มุมมองนี้มีประโยชน์เมื่อมุมมองจำเป็นต้องมีการดึงพื้นหลังออกที่มีขนาดเล็กกว่าองค์ประกอบจริงของมุมมอง ขอบเขต
คลิปที่ถอนออกได้
ไฟล์ XML ที่กำหนดรูปแบบที่ถอนออกได้ซึ่งคลิปที่ถอนออกได้นี้อีกไฟล์หนึ่งตาม ค่าระดับปัจจุบัน สร้าง ClipDrawable
สเกลที่ถอนออกได้
ไฟล์ XML ที่กำหนดหน้าเนื้อหาที่ถอนออกได้ซึ่งจะเปลี่ยนขนาดของสินค้าอื่นที่ถอนออกได้โดยอิงตาม ค่าระดับปัจจุบัน สร้าง ScaleDrawable
รูปร่างที่ถอนออกได้
ไฟล์ XML ที่กำหนดรูปทรงเรขาคณิต รวมถึงสีและการไล่ระดับสี สร้าง GradientDrawable

สำหรับข้อมูลเกี่ยวกับวิธี สร้าง AnimationDrawable โปรดดูเอกสารทรัพยากรของภาพเคลื่อนไหว

หมายเหตุ: แหล่งข้อมูลสีสามารถใช้ ในรูปแบบที่ถอนออกได้ใน XML ตัวอย่างเช่น เมื่อสร้าง รายการรัฐ วาดเขียนได้ คุณสามารถอ้างอิงทรัพยากรสีสำหรับแอตทริบิวต์ android:drawable (android:drawable="@color/green")

บิตแมป

รูปภาพบิตแมป Android สนับสนุนไฟล์บิตแมปในรูปแบบต่อไปนี้ PNG (แนะนำ), WEBP (แนะนำ, ต้องมี API ระดับ 17 ขึ้นไป), JPG (ยอมรับ), GIF (ไม่แนะนำ)

คุณสามารถอ้างอิงไฟล์บิตแมปโดยตรง โดยใช้ชื่อไฟล์เป็นรหัสทรัพยากร หรือสร้าง รหัสทรัพยากรแทนใน XML

หมายเหตุ: ไฟล์บิตแมปอาจได้รับการเพิ่มประสิทธิภาพโดยอัตโนมัติแบบไม่สูญเสียรายละเอียด การบีบอัดรูปภาพโดยเครื่องมือ aapt ในระหว่างขั้นตอนการสร้าง สำหรับ ตัวอย่างเช่น PNG แบบสีจริงที่ไม่ต้องใช้สีมากกว่า 256 สีอาจแปลงเป็น 8 บิตได้ PNG ที่มีชุดสี ซึ่งจะให้ผลลัพธ์รูปภาพที่มีคุณภาพเท่ากัน โดยใช้ทรัพยากรน้อยลง ความทรงจำ

ดังนั้นโปรดทราบว่าไบนารีรูปภาพที่วางไว้ในไดเรกทอรีนี้อาจเปลี่ยนแปลงได้ระหว่างการสร้าง ถ้า คุณวางแผนที่จะอ่านรูปภาพเป็นสตรีมบิตเพื่อแปลงเป็นบิตแมป ใส่รูปภาพของคุณ โฟลเดอร์ res/raw/ แทน ซึ่งไม่มีการเพิ่มประสิทธิภาพ

ไฟล์บิตแมป

ไฟล์บิตแมปคือไฟล์ PNG, WEBP, JPG หรือ GIF Android สร้าง Drawable สำหรับไฟล์เหล่านี้เมื่อคุณบันทึกไฟล์ในไดเรกทอรี res/drawable/

ตำแหน่งที่ตั้งไฟล์:
res/drawable/filename.png (.png, .webp, .jpg หรือ .gif)
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง BitmapDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ตัวอย่าง:
เมื่อบันทึกรูปภาพเมื่อ res/drawable/myimage.png จะใช้ XML การออกแบบนี้ รูปภาพไปยังมุมมอง:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

รหัสแอปพลิเคชันต่อไปนี้เรียกรูปภาพเป็น Drawable:

Kotlin

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)

Java

Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);
ดูเพิ่มเติม

บิตแมป XML

บิตแมป XML คือทรัพยากรที่กำหนดไว้ใน XML ซึ่งชี้ไปยังไฟล์บิตแมป เอฟเฟกต์นี้เป็นชื่อแทนของ ไฟล์บิตแมปดิบ XML สามารถระบุคุณสมบัติเพิ่มเติมสำหรับบิตแมป เช่น การแยกส่วนและการเรียงต่อกัน

หมายเหตุ: คุณสามารถใช้องค์ประกอบ <bitmap> ในฐานะองค์ประกอบย่อยของ เอลิเมนต์ <item> สำหรับ เช่น เมื่อสร้างรายการสถานะหรือรายการเลเยอร์ คุณสามารถยกเว้น android:drawable จากเอลิเมนต์ <item> แล้วฝัง <bitmap> ไว้ในเอลิเมนต์ดังกล่าว ที่กำหนดรายการที่ถอนออกได้

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง BitmapDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
องค์ประกอบ:
<bitmap>
ต้องระบุ กำหนดแหล่งที่มาของบิตแมปและพร็อพเพอร์ตี้

แอตทริบิวต์:

xmlns:android
สตริง กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android" โดยต้องใช้เฉพาะในกรณีที่ <bitmap> คือองค์ประกอบรูท ไม่จำเป็นเมื่อ <bitmap> ฝังอยู่ใน <item>
android:src
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากร
android:antialias
บูลีน เปิดหรือปิดใช้งานการลบรอยหยัก
android:dither
บูลีน เปิดหรือปิดการขจัดบิตแมปหากบิตแมปไม่ มีการกำหนดค่าพิกเซลเหมือนกันกับหน้าจอ เช่น อัตราบิต ARGB 8888 บน RGB 565 บนหน้าจอ
android:filter
บูลีน เปิดหรือปิดใช้งานการกรองบิตแมป การกรองจะใช้เมื่อ บิตแมปจะถูกย่อหรือยืดเพื่อให้รูปลักษณ์ราบรื่น
android:gravity
คีย์เวิร์ด กำหนดแรงโน้มถ่วงสำหรับบิตแมป แรงโน้มถ่วงจะบ่งบอกว่า วางตำแหน่งที่สามารถถอนออกได้ในคอนเทนเนอร์หากบิตแมปมีขนาดเล็กกว่าคอนเทนเนอร์

ต้องเป็นค่าคงที่ต่อไปนี้อย่างน้อย 1 ค่า โดยคั่นด้วย |

ค่าคำอธิบาย
top วางวัตถุไว้ที่ด้านบนของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด
bottom วางวัตถุไว้ที่ด้านล่างของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
left วางวัตถุไว้ที่ขอบด้านซ้ายของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
right วางวัตถุไว้ที่ขอบด้านขวาของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
center_vertical วางวัตถุไว้ตรงกลางแนวตั้งของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด
fill_vertical ขยายขนาดวัตถุในแนวตั้งหากจำเป็น เพื่อให้วัตถุมีขนาดพอดีกับคอนเทนเนอร์
center_horizontal วางวัตถุไว้ตรงกลางแนวนอนของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด
fill_horizontal ขยายขนาดออบเจ็กต์ในแนวนอนหากจำเป็นเพื่อให้เต็มคอนเทนเนอร์
center วางวัตถุไว้ตรงกลางของคอนเทนเนอร์ทั้งในแกนแนวตั้งและแนวนอน ไม่ใช่ กำลังเปลี่ยนขนาด
fill ขยายขนาดวัตถุในแนวนอนและแนวตั้งหากจำเป็น เพื่อให้วัตถุสมบูรณ์ คอนเทนเนอร์ โดยตัวเลือกนี้คือค่าเริ่มต้น
clip_vertical ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านบนและ/หรือด้านล่างของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวตั้ง: คลิปแรงโน้มถ่วงด้านบน ขอบด้านล่าง แรงโน้มถ่วงด้านล่างจะคลิปที่ขอบด้านบน และไม่ยึดทั้ง 2 ขอบ
clip_horizontal ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านซ้ายและ/หรือขวาของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวนอน: คลิปแรงโน้มถ่วงด้านซ้าย ขอบด้านขวา แรงโน้มถ่วงด้านขวาจะคลิปขอบด้านซ้าย และไม่ตัดคลิปทั้งสองด้าน
android:mipMap
บูลีน เปิดหรือปิดใช้คำแนะนำ Mipmap ดูข้อมูลเพิ่มเติมได้ที่ setHasMipMap() ค่าเริ่มต้นคือ false
android:tileMode
คีย์เวิร์ด กำหนดโหมดของไทล์ เมื่อเปิดใช้โหมดไทล์ บิตแมป ซ้ำกัน ระบบจะไม่สนใจแรงโน้มถ่วงเมื่อเปิดใช้โหมดไทล์

ต้องเป็นค่าคงที่ค่าใดค่าหนึ่งต่อไปนี้

ค่าคำอธิบาย
disabled อย่าเรียงบิตแมป นี่คือค่าเริ่มต้น
clamp ลอกเลียนสีขอบหากเฉดสีวาดออกนอกขอบเขตเดิม
repeat แสดงภาพของตัวปรับแสงเงาซ้ำในแนวนอนและแนวตั้ง
mirror แสดงภาพของตัวปรับแสงเงาซ้ำในแนวนอนและแนวตั้ง สลับภาพสะท้อนเพื่อให้ รูปภาพที่อยู่ติดกันจะเชื่อมถึงกันเสมอ
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
ดูเพิ่มเติม

9 แพตช์

NinePatch คือรูปภาพ PNG ที่คุณกำหนดพื้นที่ที่ยืดได้ได้ ที่ Android ปรับขนาดเมื่อเนื้อหาภายในมุมมองเกินขอบเขตของรูปภาพปกติ คุณ มักจะกำหนดรูปภาพประเภทนี้เป็นพื้นหลังของมุมมองที่ตั้งค่าขนาดไว้อย่างน้อย 1 รูปแบบ ไปยัง "wrap_content"

เมื่อมุมมองขยายออกเพื่อรองรับเนื้อหาต่างๆ ภาพ 9 จุด จะมีการปรับขนาดให้ตรงกับขนาดของมุมมองด้วย ตัวอย่างการใช้ภาพ 9 แพตช์คือ พื้นหลังที่ใช้โดยวิดเจ็ต Button มาตรฐานของ Android ซึ่งต้องขยายเป็น ปรับข้อความ (หรือรูปภาพ) ภายในปุ่มให้พอดี

คุณอ้างอิงไฟล์ 9 แพตช์ได้โดยตรง เช่นเดียวกับบิตแมปปกติ หรือจากทรัพยากรที่กำหนดโดย XML

หากต้องการพูดคุยเกี่ยวกับวิธีสร้างไฟล์ 9 แพตช์ซึ่งมีพื้นที่แบบขยายได้ ดูสร้างบิตแมปที่ปรับขนาดได้ (ไฟล์แพตช์ 9)

ไฟล์แพตช์ 9

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.9.png
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง NinePatchDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ตัวอย่าง:
เมื่อบันทึกรูปภาพเมื่อ res/drawable/myninepatch.9.png แล้ว XML เลย์เอาต์นี้ นำแพตช์ทั้ง 9 ไปใช้กับมุมมอง ดังนี้
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
ดูเพิ่มเติม

XML 9 แพตช์

XML 9-patch คือทรัพยากรที่กำหนดไว้ใน XML ที่ชี้ไปยังไฟล์ 9 แพตช์ XML สามารถ ระบุความยาวของภาพ

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง NinePatchDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
องค์ประกอบ:
<nine-patch>
ต้องระบุ กำหนดแหล่งที่มา 9 แพตช์และพร็อพเพอร์ตี้

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:src
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึง 9 แพตช์
android:dither
บูลีน เปิดหรือปิดการขจัดบิตแมปหากบิตแมปไม่ มีการกำหนดค่าพิกเซลเหมือนกันกับหน้าจอ เช่น อัตราบิต ARGB 8888 บน RGB 565 บนหน้าจอ
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

รายการเลเยอร์

LayerDrawable เป็นวัตถุที่ถอนออกได้ ที่จัดการอาร์เรย์ของทรัพยากรที่ถอนออกได้อื่นๆ แต่ละรายการที่ถอนออกได้ในรายการจะถูกวาดตามลำดับ รายการ ภาพวาดสุดท้ายที่ถอนออกได้ในรายการจะถูกวาดไว้ด้านบน

เนื้อหาที่ถอนออกได้แต่ละรายการจะแสดงด้วยองค์ประกอบ <item> ภายในองค์ประกอบ <layer-list> รายการเดียว

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง LayerDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
องค์ประกอบ:
<layer-list>
ต้องระบุ ต้องเป็นองค์ประกอบรูท มีองค์ประกอบ <item> อย่างน้อย 1 รายการ

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
<item>
กำหนดแพลตฟอร์มที่ถอนออกได้เพื่อวางในเลเยอร์ที่ถอนออกได้ในตำแหน่งที่กำหนดโดยแอตทริบิวต์ ต้องเป็นองค์ประกอบย่อยขององค์ประกอบ <layer-list> ยอมรับเด็ก <bitmap> จากองค์ประกอบเหล่านี้

แอตทริบิวต์:

android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากร
android:id
รหัสทรัพยากร รหัสทรัพยากรที่ไม่ซ้ำกันสำหรับการถอนออกได้นี้ วิธีสร้างทรัพยากรใหม่ รหัสสำหรับรายการนี้ โปรดใช้แบบฟอร์ม: "@+id/name" เครื่องหมายบวกบ่งชี้ว่าข้อความนี้สร้างขึ้นเป็น ID คุณสามารถใช้ตัวระบุนี้เพื่อ เรียกและแก้ไขที่ถอนออกได้ด้วย View.findViewById() หรือ Activity.findViewById()
android:top
มิติข้อมูล ค่าออฟเซ็ตด้านบนเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:right
มิติข้อมูล ค่าออฟเซ็ตด้านขวาซึ่งเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:bottom
มิติข้อมูล ออฟเซ็ตด้านล่างในรูปแบบค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:left
มิติข้อมูล ค่าออฟเซ็ตด้านซ้ายเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล

รายการที่ถอนออกได้ทั้งหมดจะมีการปรับขนาดให้พอดีกับขนาดของมุมมองที่มีโดยค่าเริ่มต้น ดังนั้น การวางรูปภาพในรายการเลเยอร์ในตำแหน่งต่างๆ อาจเพิ่มขนาดของมุมมอง และ รูปภาพบางรูปปรับสเกลตามความเหมาะสม

วิธีหลีกเลี่ยง สำหรับการปรับขนาดในรายการ ให้ใช้องค์ประกอบ <bitmap> ภายในองค์ประกอบ <item> เพื่อระบุส่วนที่ถอนออกได้และกำหนดแรงโน้มถ่วงให้กับสิ่งที่ไม่ เช่น "center" ตัวอย่างเช่น <item> ต่อไปนี้กำหนดรายการ ปรับขนาดให้พอดีกับมุมมองคอนเทนเนอร์

<item android:drawable="@drawable/image" />

ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <bitmap> ที่อยู่ตรงกลางเพื่อหลีกเลี่ยงการปรับขนาด แรงโน้มถ่วง:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/layers.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

ตัวอย่างนี้ใช้เอลิเมนต์ <bitmap> ที่ฝังอยู่เพื่อกำหนดโฆษณาที่ถอนออกได้ สำหรับแต่ละรายการที่มีแรงโน้มถ่วง "center" เพื่อให้แน่ใจว่าไม่มีการปรับขนาดรูปภาพเป็น พอดีกับขนาดของคอนเทนเนอร์ เนื่องจากการปรับขนาดที่เกิดจากรูปภาพออฟเซ็ต

XML การออกแบบนี้จะใช้รายการที่ถอนออกได้กับมุมมอง:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

ผลที่ได้คือรูปภาพออฟเซ็ตกองซ้อนกันมากขึ้นเรื่อยๆ ดังนี้

ดูเพิ่มเติม

รายชื่อรัฐ

StateListDrawable เป็นออบเจ็กต์ที่ถอนออกได้ที่กำหนดไว้ใน XML ที่ใช้รูปภาพหลายรูปเพื่อแสดงเป็นกราฟิกเดียวกัน ขึ้นอยู่กับสถานะของ ออบเจ็กต์นั้น เช่น สถานะของวิดเจ็ต Button สามารถแตะ โฟกัส หรือไม่ใช้ทั้งคู่ โดยใช้รายการสถานะที่ถอนออกได้ คุณจะสามารถให้ภาพพื้นหลังที่แตกต่างกันสำหรับ

คุณอธิบายรายการรัฐในไฟล์ XML กราฟิกแต่ละรายการจะแสดงด้วยองค์ประกอบ <item> ภายในองค์ประกอบ <selector> รายการเดียว แต่ละ<item> ใช้แอตทริบิวต์ที่หลากหลายเพื่ออธิบายรัฐที่ใช้เป็นกราฟิกสำหรับ ถอนออกได้

ในระหว่างการเปลี่ยนสถานะแต่ละครั้ง รายการรัฐจะข้ามผ่านจากบนลงล่าง และเป็นรายการแรกที่ ตรงกับสถานะปัจจุบันที่ใช้ การเลือกไม่ได้อิงตาม ที่ตรงกัน" แต่เป็นรายการแรกที่ตรงตามเกณฑ์ขั้นต่ำของรัฐ

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง StateListDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>
องค์ประกอบ:
<selector>
ต้องระบุ ต้องเป็นองค์ประกอบรูท มีองค์ประกอบ <item> อย่างน้อย 1 รายการ

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:constantSize
บูลีน เป็นจริงหากขนาดภายในที่ถอนออกได้ที่รายงานยังคงคงที่ตามสถานะ การเปลี่ยนแปลง (ขนาดเป็นขนาดสูงสุดของสถานะทั้งหมด) "เท็จ" หากขนาดแตกต่างกันไปตาม สถานะปัจจุบัน ระบบตั้งค่าเริ่มต้นไว้เป็น "เท็จ"
android:dither
บูลีน เป็นจริงเพื่อเปิดใช้การแบ่งบิตแมปหากบิตแมปไม่มีพิกเซลเดียวกัน เป็นหน้าจอ เช่น การใช้บิตแมป ARGB 8888 บนหน้าจอ RGB 565 "เท็จ" ถึง ปิดใช้งานการเชื่อมต่อระยะไกล ค่าเริ่มต้นคือ True
android:variablePadding
บูลีน เป็นจริงหากระยะห่างจากขอบของเนื้อหาที่ถอนออกได้เปลี่ยนแปลงตามปัจจุบัน สถานะที่เลือก เท็จ หากระยะห่างจากขอบต้องเท่าเดิม โดยอิงตามค่าสูงสุด ของทุกรัฐ คุณต้องจัดการกับ แสดงเค้าโครงเมื่อมีการเปลี่ยนแปลงสถานะ ซึ่งมักจะไม่ได้รับการสนับสนุน ระบบตั้งค่าเริ่มต้นไว้เป็น "เท็จ"
<item>
กำหนดโฆษณาที่ถอนออกได้ในบางรัฐตามที่อธิบายไว้ในแอตทริบิวต์ ต้องเป็น ย่อยขององค์ประกอบ <selector>

แอตทริบิวต์:

android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงทรัพยากรที่ถอนออกได้
android:state_pressed
บูลีน จริง หากใช้รายการนี้เมื่อมีการแตะวัตถุ เช่น เมื่อมีปุ่ม ถูกแตะต้อง เท็จ หากใช้รายการนี้ในสถานะเริ่มต้นที่ไม่มีการแตะ
android:state_focused
บูลีน เป็นจริงหากใช้รายการนี้เมื่อวัตถุมีโฟกัสอินพุต เช่น เมื่อผู้ใช้เลือกการป้อนข้อความ "เท็จ" หากใช้รายการนี้โดยค่าเริ่มต้น สถานะที่ไม่ได้มุ่งเน้น
android:state_hovered
บูลีน เป็นจริงหากใช้รายการนี้เมื่อเคอร์เซอร์วางอยู่เหนือวัตถุ เท็จ หากใช้รายการนี้ในสถานะเริ่มต้นที่ไม่ใช่ "วางเมาส์เหนือ" บ่อยครั้งที่ "ถอนออกได้" สามารถใช้ในลักษณะเดียวกับที่ถอนออกได้สำหรับปุ่ม "โฟกัส"

เปิดตัวใน API ระดับ 14

android:state_selected
บูลีน จริง หากใช้รายการนี้เมื่อออบเจ็กต์เป็นปัจจุบัน การเลือกของผู้ใช้เมื่อนำทางด้วยการควบคุมทิศทาง เช่น เมื่อนำทางผ่านรายการ ด้วย D-pad เท็จ หากใช้รายการนี้เมื่อไม่ได้เลือกออบเจ็กต์

ระบบจะใช้สถานะที่เลือกเมื่อ android:state_focused ยังไม่เพียงพอ เช่น เมื่อโฟกัสอยู่ที่มุมมองรายการและมีการเลือกรายการในนั้นด้วย D-pad

android:state_checkable
บูลีน เป็นจริงหากใช้รายการนี้เมื่อเลือกออบเจ็กต์ได้ เท็จ หากเป็นเช่นนี้ ใช้เมื่อเลือกออบเจ็กต์ไม่ได้ มีประโยชน์เมื่อออบเจ็กต์สามารถ การเปลี่ยนไปมาระหว่างวิดเจ็ตที่เลือกได้และเลือกไม่ได้
android:state_checked
บูลีน เป็นจริงหากใช้รายการนี้เมื่อเลือกออบเจ็กต์ เท็จหากเป็น ใช้เมื่อยกเลิกการเลือกออบเจ็กต์
android:state_enabled
บูลีน เป็นจริงหากใช้รายการนี้เมื่อเปิดใช้ออบเจ็กต์ หมายถึงสามารถรับกิจกรรมการสัมผัสหรือการคลิกได้ เท็จ หากใช้เมื่อออบเจ็กต์ ปิดใช้อยู่
android:state_activated
บูลีน จริง หากใช้รายการนี้เมื่อเปิดใช้งานออบเจ็กต์เป็น การเลือกถาวร เช่น เพื่อ "ไฮไลต์" รายการที่เลือกก่อนหน้านี้ใน มุมมองการนำทาง เท็จ หากใช้เมื่อไม่ได้เปิดใช้งานออบเจ็กต์

เปิดตัวใน API ระดับ 11

android:state_window_focused
บูลีน จริง หากใช้รายการนี้เมื่อหน้าต่างแอปพลิเคชันมีโฟกัสอยู่ ซึ่งหมายความว่า อยู่เบื้องหน้า เท็จ หากใช้รายการนี้เมื่อแอปพลิเคชัน จะไม่มีโฟกัส เช่น หากหน้าต่างแจ้งเตือนถูกดึงลงหรือกล่องโต้ตอบปรากฏขึ้น

หมายเหตุ: Android จะใช้รายการแรกในรายชื่อรัฐ ตรงกับสถานะปัจจุบันของออบเจ็กต์ ดังนั้น ถ้ารายการแรกในลิสต์มี ไม่มีแอตทริบิวต์สถานะก่อนหน้า ระบบจะนําไปใช้ทุกครั้ง นี่คือเหตุผลที่คุณต้องการให้ ค่าเริ่มต้นให้เป็นค่าสุดท้ายเสมอ ดังที่แสดงในตัวอย่างต่อไปนี้

ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

XML เลย์เอาต์นี้จะใช้รายการสถานะที่ถอนออกได้กับปุ่ม

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
ดูเพิ่มเติม

รายการระดับ

บริการถอนเงินที่ถอนออกได้หลายรายการ โดยแต่ละรายการจะกำหนดจำนวนสูงสุด การตั้งค่าระดับของเนื้อหาที่ถอนออกได้ด้วย setLevel() จะโหลดทรัพยากรที่ถอนออกได้ใน รายการระดับที่มีค่า android:maxLevel มากกว่าหรือเท่ากับค่า ผ่านไปยังเมธอด

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง LevelListDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
องค์ประกอบ:
<level-list>
ต้องระบุ ต้องเป็นองค์ประกอบรูท มีองค์ประกอบ <item> อย่างน้อย 1 รายการ

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
<item>
กำหนดรูปแบบที่ถอนออกได้เพื่อใช้ในระดับที่กำหนด

แอตทริบิวต์:

android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากรที่จะติดตั้ง
android:maxLevel
จำนวนเต็ม ระดับสูงสุดที่อนุญาตสำหรับรายการนี้
android:minLevel
จำนวนเต็ม ระดับต่ำสุดที่อนุญาตสำหรับรายการนี้
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

เมื่อใช้กับ View แล้ว คุณจะเปลี่ยนระดับได้ด้วย setLevel() หรือ setImageLevel()

ดูเพิ่มเติม

ปุ่มที่ถอดถอนออกได้

TransitionDrawable เป็นวัตถุที่ถอนออกได้ ที่สามารถเลื่อนดูระหว่างทรัพยากรที่ถอนออกได้อื่นๆ 2 รายการ

เนื้อหาที่ถอนออกได้แต่ละรายการจะแสดงด้วยองค์ประกอบ <item> ภายในองค์ประกอบ <transition> รายการเดียว รองรับไม่เกิน 2 รายการ หากต้องการส่งต่อ โปรดโทร startTransition() ถึง ย้อนกลับ โทร reverseTransition()

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง TransitionDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
องค์ประกอบ:
<transition>
ต้องระบุ ต้องเป็นองค์ประกอบรูท มีองค์ประกอบ <item> อย่างน้อย 1 รายการ

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
<item>
กำหนดรูปแบบที่ถอนออกได้เพื่อใช้เป็นส่วนหนึ่งของการเปลี่ยนแบบถอนออกได้ ต้องเป็นองค์ประกอบย่อยขององค์ประกอบ <transition> ยอมรับเด็ก <bitmap> จากองค์ประกอบเหล่านี้

แอตทริบิวต์:

android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากร
android:id
รหัสทรัพยากร รหัสทรัพยากรที่ไม่ซ้ำกันสำหรับการถอนออกได้นี้ วิธีสร้างทรัพยากรใหม่ รหัสสำหรับรายการนี้ โปรดใช้แบบฟอร์ม: "@+id/name" เครื่องหมายบวกบ่งชี้ว่าข้อความนี้สร้างขึ้นเป็น ID คุณสามารถใช้ตัวระบุนี้เพื่อ เรียกและแก้ไขที่ถอนออกได้ด้วย View.findViewById() หรือ Activity.findViewById()
android:top
จำนวนเต็ม ออฟเซ็ตด้านบนในหน่วยพิกเซล
android:right
จำนวนเต็ม ออฟเซ็ตด้านขวาในหน่วยพิกเซล
android:bottom
จำนวนเต็ม ออฟเซ็ตด้านล่าง หน่วยเป็นพิกเซล
android:left
จำนวนเต็ม ออฟเซ็ตด้านซ้าย หน่วยเป็นพิกเซล
ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

XML การออกแบบนี้จะใช้รายการที่ถอนออกได้กับมุมมอง:

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

และโค้ดต่อไปนี้จะดำเนินการเปลี่ยน 500 มิลลิวินาทีจากรายการแรกไปรายการที่สอง:

Kotlin

val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
    drawable.startTransition(500)
}

Java

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
    ((TransitionDrawable) drawable).startTransition(500);
}
ดูเพิ่มเติม

ด้านที่ถอนออกได้

การกำหนดที่ถอนออกได้ที่กำหนดไว้ใน XML ที่แทรกเนื้อหาที่ถอนออกได้อีกรายการหนึ่งตามระยะทางที่ระบุ มีประโยชน์ เมื่อมุมมองต้องการพื้นหลังที่เล็กกว่าขอบเขตจริงของมุมมอง

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง InsetDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
องค์ประกอบ:
<inset>
ต้องระบุ กำหนดส่วนที่ถอนออกได้ ต้องเป็นองค์ประกอบรูท

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากรที่จะติดตั้ง
android:insetTop
มิติข้อมูล ส่วนบนสุดในรูปแบบค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:insetRight
มิติข้อมูล ค่าที่ใส่ลงในค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:insetBottom
มิติข้อมูล ส่วนล่าง ซึ่งใช้เป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:insetLeft
มิติข้อมูล ส่วนซ้ายของค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
ดูเพิ่มเติม

คลิปที่ถอนออกได้

เวอร์ชันที่ถอนออกได้ที่กำหนดไว้ใน XML ที่จะตัดคลิปที่ถอนออกได้อีกรายการหนึ่งตามระดับปัจจุบันของเนื้อหาที่ถอนออกได้นี้ คุณ ควบคุมระดับความกว้างและความสูงที่ถอนออกได้ของบุตรหลานตามระดับด้วย เป็นแรงโน้มถ่วงในการควบคุมตำแหน่งที่จะวางไว้ในคอนเทนเนอร์โดยรวม มักใช้ในการติดตั้งใช้งานมากที่สุด เช่น แถบความคืบหน้า

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง ClipDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
องค์ประกอบ:
<clip>
ต้องระบุ กำหนดคลิปที่ถอนออกได้ ต้องเป็นองค์ประกอบรูท

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากรที่จะตัดออก
android:clipOrientation
คีย์เวิร์ด การวางแนวของคลิป

ต้องเป็นค่าคงที่ค่าใดค่าหนึ่งต่อไปนี้

ค่าคำอธิบาย
horizontal ตัดคลิปที่ถอนออกได้ในแนวนอน
vertical ตัดคลิปที่ถอนออกได้ในแนวตั้ง
android:gravity
คีย์เวิร์ด ระบุตำแหน่งที่จะตัดคลิปภายในโฆษณาที่ถอนออกได้

ต้องเป็นค่าคงที่ต่อไปนี้อย่างน้อย 1 ค่า โดยคั่นด้วย |

ค่าคำอธิบาย
top วางวัตถุไว้ที่ด้านบนของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด เมื่อ clipOrientation คือ "vertical" การตัดคลิปจะเกิดขึ้นที่ด้านล่างของโฆษณาที่ถอนออกได้
bottom วางวัตถุไว้ที่ด้านล่างของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด เมื่อ clipOrientation คือ "vertical" การตัดคลิปจะเกิดขึ้นที่ด้านบนของเนื้อหาที่ถอนออกได้
left วางวัตถุไว้ที่ขอบด้านซ้ายของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด นี่คือ "ค่าเริ่มต้น" เมื่อ clipOrientation คือ "horizontal" การตัดเกิดขึ้นที่ด้านขวาของ ที่ถอนออกได้
right วางวัตถุไว้ที่ขอบด้านขวาของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด เมื่อ clipOrientation คือ "horizontal" การตัดเกิดขึ้นทางด้านซ้ายของ ที่ถอนออกได้
center_vertical วางวัตถุไว้ตรงกลางแนวตั้งของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด ลักษณะการทำงานของฟีเจอร์คลิป เช่นเดียวกับเมื่อแรงโน้มถ่วงอยู่ที่ "center"
fill_vertical ขยายขนาดวัตถุในแนวตั้งหากจำเป็น เพื่อให้วัตถุมีขนาดพอดีกับคอนเทนเนอร์ เมื่อ clipOrientation เท่ากับ "vertical" จะไม่มีการคลิปเกิดขึ้นเนื่องจากโฆษณาที่ถอนได้จะเติมเต็ม ระยะห่างแนวตั้ง (เว้นแต่ระดับที่ถอนออกได้จะเป็น 0 ซึ่งในกรณีนี้มองไม่เห็น)
center_horizontal วางวัตถุไว้ตรงกลางแนวนอนของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด การตัดคลิปจะทํางานเหมือนกับเมื่อแรงโน้มถ่วงอยู่ที่ "center"
fill_horizontal ขยายขนาดออบเจ็กต์ในแนวนอนหากจำเป็นเพื่อให้เต็มคอนเทนเนอร์ วันและเวลา clipOrientation เท่ากับ "horizontal" ไม่มีการคลิปเกิดขึ้นเนื่องจากเนื้อหาที่ถอนออกได้จะเติม ช่องว่างแนวนอน (เว้นแต่ระดับที่ถอนออกได้จะเป็น 0 ซึ่งในกรณีนี้มองไม่เห็น)
center วางวัตถุไว้ตรงกลางของคอนเทนเนอร์ทั้งในแกนแนวตั้งและแนวนอน ไม่ใช่ กำลังเปลี่ยนขนาด เมื่อ clipOrientation คือ "horizontal" การตัดคลิปจะเกิดขึ้นทางด้านซ้ายและขวา เมื่อ clipOrientation คือ "vertical" การตัดคลิปจะเกิดขึ้นที่ด้านบนและด้านล่าง
fill ขยายขนาดวัตถุในแนวนอนและแนวตั้งหากจำเป็น เพื่อให้วัตถุสมบูรณ์ คอนเทนเนอร์ ไม่มีการคลิปใดๆ เกิดขึ้นเนื่องจากเนื้อหาที่ถอนออกได้ได้เติม พื้นที่แนวนอนและแนวตั้ง (เว้นแต่ระดับที่ถอนออกได้จะเป็น 0 ซึ่งในกรณีนี้ไม่ใช่ มองเห็นได้)
clip_vertical ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านบนและ/หรือด้านล่างของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวตั้ง: คลิปแรงโน้มถ่วงด้านบน ขอบด้านล่าง แรงโน้มถ่วงด้านล่างจะคลิปที่ขอบด้านบน และไม่ยึดทั้ง 2 ขอบ
clip_horizontal ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านซ้ายและ/หรือขวาของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวนอน: คลิปแรงโน้มถ่วงด้านซ้าย ขอบด้านขวา แรงโน้มถ่วงด้านขวาจะคลิปขอบด้านซ้าย และไม่ตัดคลิปทั้งสองด้าน
ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/clip.xml:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

XML การออกแบบต่อไปนี้จะใช้คลิปที่ถอนออกได้ในมุมมอง

<ImageView
    android:id="@+id/image"
    android:src="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

โค้ดต่อไปนี้ทำให้ถอนออกได้และเพิ่มจำนวนการตัดเป็น ค่อยๆ แสดงรูปภาพ:

Kotlin

val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
    drawable.level = drawable.level + 1000
}

Java

ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
    ((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}

การเพิ่มระดับจะลดปริมาณการตัดและค่อยๆ แสดงรูปภาพ จัดให้เลย ที่ระดับ 7000:

หมายเหตุ: ระดับเริ่มต้นคือ 0 ซึ่งจะตัดให้เต็มรูปภาพ ไม่แสดง เมื่ออยู่ในระดับ 10,000 รูปภาพจะไม่ถูกตัดออกและจะมองเห็นได้อย่างชัดเจน

ดูเพิ่มเติม

ตาชั่งที่ถอนออกได้

A Dreamable ที่กำหนดไว้ใน XML ที่เปลี่ยนขนาดของเนื้อหาที่ถอนออกได้อื่นตามการตั้งค่าปัจจุบัน

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง ScaleDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
องค์ประกอบ:
<scale>
ต้องระบุ กำหนดขนาดที่ถอนออกได้ ต้องเป็นองค์ประกอบรูท

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:drawable
แหล่งข้อมูลที่ถอนออกได้ ต้องระบุ การอ้างอิงถึงโฆษณาที่ถอนออกได้ ทรัพยากร
android:scaleGravity
คีย์เวิร์ด ระบุตำแหน่งแรงโน้มถ่วงหลังจากการปรับขนาด

ต้องเป็นค่าคงที่ต่อไปนี้อย่างน้อย 1 ค่า โดยคั่นด้วย |

ค่าคำอธิบาย
top วางวัตถุไว้ที่ด้านบนของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด
bottom วางวัตถุไว้ที่ด้านล่างของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
left วางวัตถุไว้ที่ขอบด้านซ้ายของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด นี่คือ "ค่าเริ่มต้น"
right วางวัตถุไว้ที่ขอบด้านขวาของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
center_vertical วางวัตถุไว้ตรงกลางแนวตั้งของคอนเทนเนอร์ โดยไม่เปลี่ยนขนาด
fill_vertical ขยายขนาดวัตถุในแนวตั้งหากจำเป็น เพื่อให้วัตถุมีขนาดพอดีกับคอนเทนเนอร์
center_horizontal วางวัตถุไว้ตรงกลางแนวนอนของคอนเทนเนอร์โดยไม่เปลี่ยนขนาด
fill_horizontal ขยายขนาดออบเจ็กต์ในแนวนอนหากจำเป็นเพื่อให้เต็มคอนเทนเนอร์
center วางวัตถุไว้ตรงกลางของคอนเทนเนอร์ทั้งในแกนแนวตั้งและแนวนอน ไม่ใช่ กำลังเปลี่ยนขนาด
fill ขยายขนาดวัตถุในแนวนอนและแนวตั้งหากจำเป็น เพื่อให้วัตถุสมบูรณ์ คอนเทนเนอร์
clip_vertical ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านบนและ/หรือด้านล่างของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวตั้ง: คลิปแรงโน้มถ่วงด้านบน ขอบด้านล่าง แรงโน้มถ่วงด้านล่างจะคลิปที่ขอบด้านบน และไม่ยึดทั้ง 2 ขอบ
clip_horizontal ตัวเลือกเพิ่มเติมที่ตั้งค่าให้ตัดขอบด้านซ้ายและ/หรือขวาของบุตรหลานได้ ขอบเขตของคอนเทนเนอร์ คลิปจะขึ้นอยู่กับแรงโน้มถ่วงในแนวนอน: คลิปแรงโน้มถ่วงด้านซ้าย ขอบด้านขวา แรงโน้มถ่วงด้านขวาจะคลิปขอบด้านซ้าย และไม่ตัดคลิปทั้งสองด้าน
android:scaleHeight
เปอร์เซ็นต์ ความสูงแสดงเป็นเปอร์เซ็นต์ของรายการที่ถอนออกได้ ขอบเขต รูปแบบของค่าคือ XX% เช่น 100% หรือ 12.5%
android:scaleWidth
เปอร์เซ็นต์ ความกว้างของมาตราส่วนซึ่งแสดงเป็นเปอร์เซ็นต์ของส่วนแบ่งที่ถอนออกได้ ขอบเขต รูปแบบของค่าคือ XX% เช่น 100% หรือ 12.5%
ตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
ดูเพิ่มเติม

รูปทรงที่ถอนออกได้

นี่คือรูปร่างทั่วไปที่กำหนดไว้ใน XML

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์คือรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง GradientDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
องค์ประกอบ:
<shape>
ต้องระบุ รูปร่างที่ถอนออกได้ ต้องเป็นองค์ประกอบรูท

แอตทริบิวต์:

xmlns:android
สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งต้อง "http://schemas.android.com/apk/res/android"
android:shape
คีย์เวิร์ด กำหนดประเภทของรูปร่าง ค่าที่ถูกต้องคือ
ค่าคำอธิบาย
"rectangle" สี่เหลี่ยมผืนผ้าที่เติมเต็มมุมมองที่มี นี่คือรูปร่างเริ่มต้น
"oval" รูปวงรีที่พอดีกับขนาดของมุมมองที่มี
"line" เส้นแนวนอนที่ครอบคลุมความกว้างของมุมมองที่มี ช่วงเวลานี้ รูปร่างต้องใช้องค์ประกอบ <stroke> เพื่อกำหนดความกว้างของ บรรทัด
"ring" รูปทรงวงแหวน

แอตทริบิวต์ต่อไปนี้จะใช้เมื่อ android:shape="ring" เท่านั้น

android:innerRadius
มิติข้อมูล รัศมีของพารามิเตอร์ ส่วนด้านในของวงแหวน (รูตรงกลาง) โดยเป็นค่ามิติข้อมูลหรือทรัพยากรของมิติข้อมูล
android:innerRadiusRatio
ลอย รัศมีสำหรับภายใน ส่วนหนึ่งของแหวน ซึ่งแสดงเป็นอัตราส่วนของความกว้างของวงแหวน เช่น ถ้า android:innerRadiusRatio="5" รัศมีภายในจะเท่ากับความกว้างของวงแหวนหารด้วย 5 ช่วงเวลานี้ ถูกลบล้างโดย android:innerRadius ค่าเริ่มต้นคือ 9
android:thickness
มิติข้อมูล ความหนาของ เป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:thicknessRatio
ลอย ความหนาของแหวน แสดงเป็นอัตราส่วนความกว้างของวงแหวน ตัวอย่างเช่น ถ้า android:thicknessRatio="2" แล้ว ความหนาเท่ากับความกว้างของแหวนหารด้วย 2 ค่านี้ลบล้างโดย android:innerRadius ค่าเริ่มต้นคือ 3
android:useLevel
บูลีน เป็นจริงหากใช้ค่านี้เป็น LevelListDrawable ซึ่งปกติแล้วจะเป็นเท็จ ไม่เช่นนั้นรูปร่างอาจไม่ปรากฏให้เห็น
<corners>
สร้างมุมโค้งมนตามรูปร่าง ใช้เฉพาะเมื่อรูปร่างเป็นสี่เหลี่ยมผืนผ้า

แอตทริบิวต์:

android:radius
มิติข้อมูล รัศมีของทุกมุม โดยเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล ข้อมูลนี้จะลบล้างสำหรับแต่ละ ด้วยแอตทริบิวต์ต่อไปนี้
android:topLeftRadius
มิติข้อมูล รัศมีของมุมซ้ายบนเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:topRightRadius
มิติข้อมูล รัศมีที่มุมขวาบนเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:bottomLeftRadius
มิติข้อมูล รัศมีสำหรับมุมซ้ายล่างที่ใช้เป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:bottomRightRadius
มิติข้อมูล รัศมีสำหรับมุมขวาล่าง ซึ่งใช้เป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล

หมายเหตุ: ในขั้นต้นจะต้องมีทุกมุม รัศมีมากกว่า 1 หรือมิฉะนั้นจะไม่มีการปัดเศษมุม หากต้องการมุมเฉพาะ ให้ไม่ปัดเศษ วิธีแก้ปัญหาเบื้องต้นคือใช้ android:radius เพื่อตั้งค่ามุมเริ่มต้น รัศมีที่มากกว่า 1 แล้วแทนที่ทุกมุมด้วยค่าที่คุณ ต้องการ โดยให้ 0 ("0dp") ในจุดที่ไม่ต้องการให้มีมุมโค้งมน

<gradient>
ระบุสีการไล่ระดับสีสำหรับรูปร่าง

แอตทริบิวต์:

android:angle
จำนวนเต็ม มุมของการไล่ระดับสี หน่วยเป็นองศา 0 คือจากซ้ายไปขวา 90 คือ จากล่างขึ้นบน ต้องเป็นผลคูณของ 45 ค่าเริ่มต้นคือ 0
android:centerX
ลอย ตำแหน่ง X สัมพัทธ์สำหรับศูนย์กลางของการไล่ระดับสี (0 - 1.0)
android:centerY
ลอย ตำแหน่ง Y สัมพัทธ์สำหรับจุดศูนย์กลางของการไล่ระดับสี (0 - 1.0)
android:centerColor
สี สีที่ไม่บังคับซึ่งอยู่ระหว่างสีเริ่มต้นกับสีสิ้นสุด โดยสามารถใช้เป็น ค่าฐานสิบหกหรือแหล่งข้อมูลสี
android:endColor
สี สีสิ้นสุดในรูปแบบเลขฐาน 16 ค่า หรือทรัพยากรสี
android:gradientRadius
ลอย รัศมีของการไล่ระดับสี ใช้เมื่อ android:type="radial" เท่านั้น
android:startColor
สี สีเริ่มต้นในรูปแบบเลขฐาน 16 ค่า หรือทรัพยากรสี
android:type
คีย์เวิร์ด ประเภทของรูปแบบการไล่ระดับสีที่จะใช้ ค่าที่ถูกต้องคือ
ค่าคำอธิบาย
"linear" การไล่ระดับสีแบบเส้นตรง โดยตัวเลือกนี้คือค่าเริ่มต้น
"radial" การไล่ระดับสีแบบรัศมี สีเริ่มต้นคือสีตรงกลาง
"sweep" การไล่ระดับสีของเส้น
android:useLevel
บูลีน เป็นจริงหากใช้รายการนี้เป็น LevelListDrawable
<padding>
ระยะห่างจากขอบที่จะใช้กับองค์ประกอบมุมมองที่มี เพื่อกดตำแหน่งของมุมมอง เนื้อหา ไม่ใช่รูปร่าง

แอตทริบิวต์:

android:left
มิติข้อมูล ระยะห่างจากขอบด้านซ้ายเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:top
มิติข้อมูล ระยะห่างจากขอบด้านบนเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:right
มิติข้อมูล ระยะห่างจากขอบด้านขวา เป็นค่ามิติข้อมูลหรือทรัพยากรของมิติข้อมูล
android:bottom
มิติข้อมูล ระยะห่างจากขอบด้านล่างเป็นค่ามิติข้อมูลหรือทรัพยากรของมิติข้อมูล
<size>
ขนาดของรูปร่าง

แอตทริบิวต์:

android:height
มิติข้อมูล ความสูงของรูปร่างเป็นค่าขนาดหรือทรัพยากรของมิติข้อมูล
android:width
มิติข้อมูล ความกว้างของรูปร่างเป็นค่ามิติข้อมูลหรือทรัพยากรของมิติข้อมูล

หมายเหตุ: โดยค่าเริ่มต้น รูปร่างจะปรับตามขนาดของคอนเทนเนอร์ ดูสัดส่วนกับขนาดที่กำหนดไว้ที่นี่ เมื่อใช้รูปร่างใน ImageView คุณจะจำกัดการปรับขนาดได้โดยการตั้งค่า android:scaleType เป็น "center"

<solid>
สีทึบเพื่อเติมรูปร่าง

แอตทริบิวต์:

android:color
สี สีที่จะใช้กับรูปร่าง เป็นเลขฐานสิบหก ค่า หรือทรัพยากรสี
<stroke>
เส้นโครงร่างของรูปร่าง

แอตทริบิวต์:

android:width
มิติข้อมูล ความหนาของเส้นที่ใช้เป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล
android:color
สี สีของเส้น ในรูปแบบ ค่าฐานสิบหกหรือแหล่งข้อมูลสี
android:dashGap
มิติข้อมูล ระยะห่างระหว่างขีดกลางยาว เป็นค่ามิติข้อมูลหรือทรัพยากรของมิติข้อมูล ใช้ได้เฉพาะเมื่อตั้งค่า android:dashWidth
android:dashWidth
มิติข้อมูล ขนาดของเส้นประแต่ละเส้นเป็นค่ามิติข้อมูลหรือทรัพยากรมิติข้อมูล ใช้ได้เฉพาะเมื่อตั้งค่า android:dashGap
ตัวอย่าง:
ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/gradient_box.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

XML การออกแบบนี้จะใช้รูปร่างที่ถอนออกได้ในมุมมอง:

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

โค้ดของแอปพลิเคชันนี้มีรูปร่างที่ถอนออกได้และนำไปใช้กับมุมมอง:

Kotlin

val shape: Drawable? = getDrawable(resources, R.drawable.gradient_box, getTheme())

val tv: TextView = findViewById(R.id.textview)
tv.background = shape

Java

Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.gradient_box, getTheme());

TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
ดูเพิ่มเติม