android: ยืดภาพในมุมมองภาพให้พอดีกับหน้าจอ


126

ฉันมีimageviewที่มีความสูงและความกว้างตั้งค่าfill_parentเป็นlinearlayoutที่มีค่าที่ตั้งไว้เหมือนกัน ดังนั้นฉันคิดว่านี่ควรตั้งค่ารูปภาพให้พอดีกับหน้าจอ แต่จะพอดีกับ 80% เท่านั้น (ระยะขอบบนและล่างในโหมดแนวนอน)

ฉันลองใช้รหัสต่อไปนี้แล้วไม่ประสบความสำเร็จ:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);

imgView.setMaxWidth(width);
imgView.setMaxHeight(height);

ความคิดอื่น ๆ ?


แม้ว่าจะเป็นปัญหาที่แตกต่างกันเล็กน้อย แต่คำตอบนี้จะช่วยคุณได้
fredley

คำตอบ:


317

เพื่อเปลี่ยนการใช้งานตามหลักไวยากรณ์:

imgview.setScaleType(ScaleType.FIT_XY);

หรือ

การเปลี่ยนจากการใช้ xml:

 android:scaleType="fitXY"

26
ฉันรู้ว่านี่คือสิ่งที่คุณต้องการ แต่สำหรับภาพที่คุณสนใจเกี่ยวกับอัตราส่วนภาพสิ่งนี้จะขยายออกไป
Artem Russakovskii

ทำงานได้อย่างมหัศจรรย์สำหรับ ImageView ภายใน ScrollView แม้แต่แง่มุมก็ยังคงถูกต้อง
JNissi

10
สามารถกำหนดเช่นเดียวกันได้ในรูปแบบ xml, android: scaleType = "fitXY"
Sathesh

9
เพื่อให้ภาพเต็มพื้นที่และรักษาอัตราส่วนที่ดีไว้ใช้v.setAdjustViewBounds(true); v.setScaleType(ImageView.ScaleType.CENTER_CROP);
Marco Florian

1
ทำงานได้อย่างมีเสน่ห์
dave o grady

119

ให้ในไฟล์ xml ของเค้าโครงandroid:scaleType="fitXY"
PS ของคุณ: สิ่งนี้ใช้กับเมื่อตั้งค่าภาพandroid:src="..."แทนที่จะandroid:background="..."เป็นพื้นหลังจะถูกตั้งค่าโดยค่าเริ่มต้นเพื่อยืดและพอดีกับมุมมอง


พื้นหลังไม่ได้ช่วยแก้ปัญหาให้ฉันฉันทำอะไรผิดหรือเปล่า? โปรดดูที่: stackoverflow.com/questions/14164473/…
Dheeraj Bhaskar

1
สิ่งนี้ไม่ได้ดูแลอัตราส่วนหากคุณฮาร์ดโค้ดความกว้างของภาพและต้องการความสูงตามขนาด
Akshat Agarwal

จะเอาให้พอดีกับทั้งหน้าจอได้อย่างไร? ฉันต้องการให้มันยังคงเป็นสัดส่วน
Ruchir Baronia

+1 สำหรับการบอกว่าใช้กับ android: src = "... " มากกว่า android: background = "... " สิ่งนี้สำคัญมาก
DragonFire

20

ใช้สิ่งนี้:

ImageView.setAdjustViewBounds(true);

4
สิ่งนี้ร่วมกับandroid:scaleType="fitXY"สิ่งที่ได้ผล ขอบคุณ
smac89

@ smac89 อะไรคือความแตกต่างระหว่างชุดค่าผสมเหล่านี้กับการใช้ FIT_CENTER? ไม่ควรใช้ FIT_CENTER?
Jenix

@Jenix คิดว่าเป็นเวลานานแล้วที่ฉันสัมผัส Android ครั้งสุดท้าย แต่ฉันเชื่อว่าเหตุผลที่ทำfitXYคือการยืดภาพตามสัดส่วนเพื่อให้พอดีกับเฟรม / มุมมองที่ตั้งค่าไว้การใช้FIT_CENTERเสียงเหมือนจะวางภาพ ตรงกลางของมุมมอง แต่ไม่เติมเต็มมุมมอง ฉันอาจจะคิดผิด แต่คุณสามารถทดลองอย่างใดอย่างหนึ่งเพื่อดูว่าอะไรได้ผล
smac89

@ smac89 ก่อนที่จะถามฉันได้ทดสอบทั้งสองแล้วและมันก็ใช้งานได้เหมือนกัน ฉันสงสัยเกี่ยวกับเหตุผล แต่ตอนนี้คิดว่าคุณไม่รู้จัก FIT_CENTER เหมือนกับความจริงที่ฉันไม่รู้เกี่ยวกับชุดค่าผสมที่คุณแจ้งให้เราทราบ :)
Jenix

9

ถ้าคุณใช้android:scaleType="fitXY"คุณต้องระบุ

android:layout_width="75dp" และ android:layout_height="75dp"

ถ้าใช้ wrap_content มันจะไม่ยืดตามที่คุณต้องการ

<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/listItemNoteImage"
android:src="@drawable/MyImage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="12dp"
android:scaleType="fitXY"/>


2

ฉันใช้android:scaleType="fitXY"รหัสนี้ในไฟล์ Xml


0

เพียงแค่เปลี่ยนความสูงและความกว้าง ImageView ของคุณเป็น wrap_content แล้วใช้

exampleImage.setScaleType (ImageView.ScaleType.FIT_XY);

ในรหัสของคุณ


-11

ลองใช้:

imageview.setFitToScreen(true);
imageview.setScaleType(ScaleType.FIT_CENTER);

สิ่งนี้จะพอดีกับมุมมองภาพของคุณกับหน้าจอด้วยอัตราส่วนที่ถูกต้อง


12
"imageview.setFitToScreen (จริง);" - นั่นคืออะไร? วิธีการบางอย่างที่ไม่มีเอกสาร?
Malachiasz

ฉันใช้ eclipse และไม่ได้รวบรวม:imageview.setFitToScreen(true)
ผู้เรียน

5
ไม่มีวิธีการเช่นนี้ใน Android
NightFury

บางทีเขาหมายถึงsetFitsSystemWindows()??
ban-geoengineering
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.