Android: จะขยายภาพให้มีความกว้างของหน้าจอได้อย่างไรโดยที่ยังคงอัตราส่วนไว้


118

ฉันต้องการดาวน์โหลดภาพ (ไม่ทราบขนาด แต่มักจะเป็นสี่เหลี่ยมจัตุรัส) และแสดงให้เต็มหน้าจอในแนวนอนและยืดออกในแนวตั้งเพื่อรักษาอัตราส่วนของภาพในทุกขนาดหน้าจอ นี่คือรหัส (ไม่ทำงาน) ของฉัน มันยืดภาพในแนวนอน แต่ไม่ใช่แนวตั้งดังนั้นมันจึงถูกบีบ ...

ImageView mainImageView = new ImageView(context);
    mainImageView.setImageBitmap(mainImage); //downloaded from server
    mainImageView.setScaleType(ScaleType.FIT_XY);
    //mainImageView.setAdjustViewBounds(true); 
    //with this line enabled, just scales image down
    addView(mainImageView,new LinearLayout.LayoutParams( 
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

อุปกรณ์ Android ทั้งหมดมีอัตราส่วนความกว้าง / ความสูงเท่ากันหรือไม่ หากไม่เป็นเช่นนั้นก็เป็นไปไม่ได้เลยที่จะปรับขนาดภาพให้พอดีกับความกว้าง / ความสูงทั้งหมดในขณะที่ยังคงอัตราส่วนเดิมไว้ ...
NoozNooz42

4
ไม่ฉันไม่ต้องการให้ภาพเต็มหน้าจอเพียงแค่ปรับขนาดให้เท่ากับความกว้างของหน้าจอฉันไม่สนใจว่าภาพจะขึ้นในแนวตั้งเท่าไหร่ตราบใดที่ภาพอยู่ในสัดส่วนที่ถูกต้อง
fredley

1
คำถามที่คล้ายกันคำตอบที่ดี: stackoverflow.com/questions/4677269/…
Pēteris Caune

1
'adjustmentViewBounds' ไม่ทำงานหรือไม่
Darpan

คำตอบ:


132

ฉันทำสิ่งนี้สำเร็จด้วยมุมมองที่กำหนดเอง ตั้งค่า layout_width = "fill_parent" และ layout_height = "wrap_content" และชี้ไปที่ drawable ที่เหมาะสม:

public class Banner extends View {

  private final Drawable logo;

  public Banner(Context context) {
    super(context);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs) {
    super(context, attrs);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  @Override protected void onMeasure(int widthMeasureSpec,
      int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = width * logo.getIntrinsicHeight() / logo.getIntrinsicWidth();
    setMeasuredDimension(width, height);
  }
}

12
ขอบคุณ!! นี่น่าจะเป็นคำตอบที่ถูกต้อง! :) ฉันปรับสิ่งนี้เพื่อความยืดหยุ่นมากขึ้นในโพสต์นี้: stackoverflow.com/questions/4677269/…ที่นั่นฉันใช้ ImageView เพื่อให้สามารถตั้งค่าที่ดึงได้ใน XML หรือใช้เหมือน ImageView ปกติในโค้ดเพื่อตั้งค่ารูปภาพ ใช้งานได้ดี!
Patrick Boos

1
อัจฉริยะ Freakin! ที่ทำงานเหมือนแชมป์! ขอบคุณที่แก้ไขปัญหาของฉันด้วยแบนเนอร์รูปภาพที่ด้านบนไม่ถูกต้องในทุกขนาดหน้าจอ! ขอบคุณมาก!
JPM

1
ระวังโลโก้เป็นโมฆะ (หากคุณกำลังดาวน์โหลดเนื้อหาจากอินเทอร์เน็ต) มิฉะนั้นจะได้ผลดีให้ทำตามโพสต์ของ Patrick เพื่อดูข้อมูลโค้ด XML
Artem Russakovskii

44
ฉันไม่อยากจะเชื่อเลยว่าการทำสิ่งต่างๆบน Android นั้นทำได้ง่ายเพียงใดใน iOS และ Windows Phone
mxcl

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

24

ในท้ายที่สุดฉันสร้างมิติข้อมูลด้วยตนเองซึ่งใช้งานได้ดี:

DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = width * mainImage.getHeight() / mainImage.getWidth(); //mainImage is the Bitmap I'm drawing
addView(mainImageView,new LinearLayout.LayoutParams( 
        width, height));

ฉันกำลังมองหาวิธีแก้ปัญหาประเภทนี้เพื่อแก้ไขปัญหาของฉันด้วยความช่วยเหลือของการคำนวณนี้ทำให้ฉันโหลดรูปภาพได้สำเร็จโดยไม่ลดอัตราส่วน
สตีฟ

21

ฉันเพิ่งอ่านซอร์สโค้ดImageViewและโดยพื้นฐานแล้วเป็นไปไม่ได้เลยหากไม่ใช้โซลูชันคลาสย่อยในเธรดนี้ ในImageView.onMeasureที่เราจะไปเส้นเหล่านี้:

        // Get the max possible width given our constraints
        widthSize = resolveAdjustedSize(w + pleft + pright, mMaxWidth, widthMeasureSpec);

        // Get the max possible height given our constraints
        heightSize = resolveAdjustedSize(h + ptop + pbottom, mMaxHeight, heightMeasureSpec);

ขนาดของรูปภาพอยู่ที่ไหนhและอยู่ที่ไหนและwเป็นp*ช่องว่างภายใน

แล้ว:

private int resolveAdjustedSize(int desiredSize, int maxSize,
                               int measureSpec) {
    ...
    switch (specMode) {
        case MeasureSpec.UNSPECIFIED:
            /* Parent says we can be as big as we want. Just don't be larger
               than max size imposed on ourselves.
            */
            result = Math.min(desiredSize, maxSize);

ดังนั้นหากคุณlayout_height="wrap_content"ตั้งค่าไว้widthSize = w + pleft + prightหรือกล่าวอีกนัยหนึ่งความกว้างสูงสุดจะเท่ากับความกว้างของรูปภาพ

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

อีกวิธีหนึ่ง

นี่เป็นอีกหนึ่งวิธีแก้ปัญหา subclassed แต่คุณควร (ในทางทฤษฎีฉันไม่ได้ทดสอบจริงๆมันมาก!) ImageViewจะสามารถใช้งานได้ทุกที่ที่คุณ เพื่อใช้มันตั้งค่าlayout_width="match_parent"และlayout_height="wrap_content". มันค่อนข้างทั่วไปมากกว่าโซลูชันที่ยอมรับเช่นกัน เช่นคุณสามารถปรับขนาดให้พอดีกับความสูงและพอดีกับความกว้าง

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

// This works around the issue described here: http://stackoverflow.com/a/12675430/265521
public class StretchyImageView extends ImageView
{

    public StretchyImageView(Context context)
    {
        super(context);
    }

    public StretchyImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public StretchyImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        // Call super() so that resolveUri() is called.
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        // If there's no drawable we can just use the result from super.
        if (getDrawable() == null)
            return;

        final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
        final int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);

        int w = getDrawable().getIntrinsicWidth();
        int h = getDrawable().getIntrinsicHeight();
        if (w <= 0)
            w = 1;
        if (h <= 0)
            h = 1;

        // Desired aspect ratio of the view's contents (not including padding)
        float desiredAspect = (float) w / (float) h;

        // We are allowed to change the view's width
        boolean resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;

        // We are allowed to change the view's height
        boolean resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;

        int pleft = getPaddingLeft();
        int pright = getPaddingRight();
        int ptop = getPaddingTop();
        int pbottom = getPaddingBottom();

        // Get the sizes that ImageView decided on.
        int widthSize = getMeasuredWidth();
        int heightSize = getMeasuredHeight();

        if (resizeWidth && !resizeHeight)
        {
            // Resize the width to the height, maintaining aspect ratio.
            int newWidth = (int) (desiredAspect * (heightSize - ptop - pbottom)) + pleft + pright;
            setMeasuredDimension(newWidth, heightSize);
        }
        else if (resizeHeight && !resizeWidth)
        {
            int newHeight = (int) ((widthSize - pleft - pright) / desiredAspect) + ptop + pbottom;
            setMeasuredDimension(widthSize, newHeight);
        }
    }
}

ฉันส่งรายงานข้อผิดพลาด ดูเป็นเมิน!
Timmmm

3
เห็นได้ชัดว่าฉันต้องกินคำพูดของฉัน - พวกเขาบอกว่ามันได้รับการแก้ไขในอนาคต!
Timmmm

ขอบคุณทิมมาก ๆ นี่ควรเป็นคำตอบสุดท้ายที่ถูกต้อง ฉันค้นหามานานแล้วและไม่มีอะไรจะดีไปกว่าทางออกของคุณ!
tainy

จะเป็นอย่างไรถ้าฉันต้องการตั้งค่า maxHeight เมื่อใช้ StretchyImageView ด้านบน ฉันไม่พบวิธีแก้ปัญหาสำหรับสิ่งนั้น
tainy

17

การตั้งค่า adjustmentViewBounds เป็น true และการใช้กลุ่มมุมมอง LinearLayout ทำงานได้ดีสำหรับฉัน ไม่จำเป็นต้องคลาสย่อยหรือขอเมตริกอุปกรณ์:

//NOTE: "this" is a subclass of LinearLayout
ImageView splashImageView = new ImageView(context);
splashImageView.setImageResource(R.drawable.splash);
splashImageView.setAdjustViewBounds(true);
addView(splashImageView);

1
... หรือใช้คุณสมบัติ ImageView XML - android: adjustmentViewBounds = "true"
Anatoliy Shuba

ที่สมบูรณ์แบบ! นี่เป็นเรื่องง่ายมากและทำให้ภาพออกมาสมบูรณ์แบบ คำตอบนี้ไม่ใช่คำตอบที่ถูกต้องหรือไม่? คำตอบของ CustomView ไม่ได้ผลสำหรับฉัน (ข้อผิดพลาด xml แปลก ๆ )
user3800924

13

ฉันกำลังต่อสู้กับปัญหานี้ในรูปแบบใดรูปแบบหนึ่งมานานแล้วขอบคุณขอบคุณขอบคุณ .... :)

ฉันแค่อยากจะชี้ให้เห็นว่าคุณสามารถหาวิธีแก้ปัญหาที่เข้าใจได้ทั่วไปจากสิ่งที่ Bob Lee ทำโดยแค่ขยาย View และลบล้าง onMeasure ด้วยวิธีนี้คุณสามารถใช้สิ่งนี้กับสิ่งที่วาดได้ที่คุณต้องการและจะไม่แตกหากไม่มีภาพ:

    public class CardImageView extends View {
        public CardImageView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }

        public CardImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public CardImageView(Context context) {
            super(context);
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            Drawable bg = getBackground();
            if (bg != null) {
                int width = MeasureSpec.getSize(widthMeasureSpec);
                int height = width * bg.getIntrinsicHeight() / bg.getIntrinsicWidth();
                setMeasuredDimension(width,height);
            }
            else {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            }
        }
    }

2
ในบรรดาวิธีแก้ปัญหามากมายสำหรับปัญหานี้นี่เป็นวิธีแรกซึ่งเป็นเพียงโซลูชันแบบดรอปอินซึ่งคนอื่น ๆ มักจะมีข้อเสียอยู่เสมอ (เช่นไม่สามารถเปลี่ยนภาพในรันไทม์โดยไม่ต้องเขียนโค้ดใหม่) ขอบคุณ!
MacD

นี่เป็นความยอดเยี่ยมที่บริสุทธิ์ - ได้รับการต่อสู้กับสิ่งนี้มาระยะหนึ่งแล้วและโซลูชันที่ชัดเจนทั้งหมดโดยใช้แอตทริบิวต์ xml ไม่เคยได้ผล ด้วยสิ่งนี้ฉันสามารถแทนที่ ImageView ของฉันด้วยมุมมองแบบขยายและทุกอย่างทำงานได้ตามที่คาดไว้!
slott

นี่เป็นทางออกที่ดีที่สุดสำหรับปัญหานี้
erlando

นั่นเป็นคำตอบที่ดี คุณสามารถใช้คลาสนี้ในไฟล์ xml ได้โดยไม่ต้องกังวล: <com.yourpackagename.CardImageView android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: background = "@ drawable / your_photo" /> ที่ดี!
arniotaki

11

ในบางกรณีสูตรมหัศจรรย์นี้ช่วยแก้ปัญหาได้อย่างสวยงาม

สำหรับใครก็ตามที่กำลังดิ้นรนกับสิ่งนี้ที่มาจากแพลตฟอร์มอื่นตัวเลือก"ขนาดและรูปร่างที่พอดี"จะได้รับการจัดการอย่างสวยงามใน Android แต่ก็หาได้ยาก

โดยทั่วไปคุณต้องการชุดค่าผสมนี้:

  • ความกว้างตรงกับพาเรนต์
  • เนื้อหาห่อความสูง
  • AdjustViewBounds เปิดอยู่ (sic)
  • ขนาดfitCenter
  • cropToPadding ปิด (sic)

จากนั้นก็เป็นไปโดยอัตโนมัติและน่าทึ่ง

หากคุณเป็นนักพัฒนา iOS มันน่าทึ่งมากที่ใน Android คุณสามารถทำ "ความสูงของเซลล์แบบไดนามิกทั้งหมด" ได้ในมุมมองตาราง .. เอ่อฉันหมายถึง ListView สนุก.

<com.parse.ParseImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/post_image"
    android:src="@drawable/icon_192"
    android:layout_margin="0dp"
    android:cropToPadding="false"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:background="#eff2eb"/>

ใส่คำอธิบายภาพที่นี่


6

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

<FrameLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content">

     <ImageView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:adjustViewBounds="true"
          android:scaleType="centerCrop"
          android:src="@drawable/whatever" />
</FrameLayout>

ขออภัยสิ่งนี้ใช้ไม่ได้ มันปรับขนาดความกว้าง แต่ centerCrop ไม่รักษาอัตราส่วนภาพ
ricosrealm

1
หลังจากใช้เวลาหลายชั่วโมงในการต่อสู้กับคลาสแบบกำหนดเองที่ขยาย ImageView (ตามที่เขียนไว้ในคำตอบและบทความมากมาย) และมีข้อยกเว้นเช่น "ไม่พบคลาสต่อไปนี้" ฉันลบโค้ดนั้นออก ทันใดนั้นฉันสังเกตเห็นปัญหาใน ImageView ของฉันอยู่ในคุณสมบัติพื้นหลัง! เปลี่ยนเป็นsrcและ ImageView เป็นสัดส่วน
CoolMind

5

ฉันทำกับค่าเหล่านี้ภายใน LinearLayout:

Scale type: fitStart
Layout gravity: fill_horizontal
Layout height: wrap_content
Layout weight: 1
Layout width: fill_parent

คุณช่วยยกตัวอย่างจริงได้ไหม? ฉันจะใส่ค่าเหล่านี้ในไฟล์ xml ของฉันได้ที่ไหน
John Smith Optional

5

ทุกคนกำลังทำโปรแกรมนี้ดังนั้นฉันคิดว่าคำตอบนี้จะเหมาะกับที่นี่ รหัสนี้ใช้ได้กับ my ใน xml ฉันยังไม่ได้คิดเกี่ยวกับอัตราส่วน แต่ยังคงต้องการที่จะให้คำตอบนี้ว่ามันจะช่วยใครได้

android:adjustViewBounds="true"

ไชโย ..


3

RelativeLayoutวิธีการแก้ปัญหาที่ง่ายมากคือเพียงแค่ใช้คุณสมบัติที่มีให้โดย

นี่คือ xml ที่ทำให้เป็นไปได้กับ Android มาตรฐานViews:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <LinearLayout
            android:id="@+id/button_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_alignParentBottom="true"
            >
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <ImageView 
            android:src="@drawable/cat"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:layout_above="@id/button_container"/>
    </RelativeLayout>
</ScrollView>

เคล็ดลับคือคุณตั้งค่าImageViewให้เต็มหน้าจอ แต่ต้องอยู่เหนือเค้าโครงอื่น ๆ ด้วยวิธีนี้คุณจะบรรลุทุกสิ่งที่คุณต้องการ


2

เรื่องง่ายๆในการตั้งค่าadjustViewBounds="true"และscaleType="fitCenter"ในไฟล์ XML สำหรับ ImageView!

<ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image"

        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        />

หมายเหตุ: layout_widthตั้งค่าเป็นmatch_parent


1

คุณกำลังตั้งค่า ScaleType เป็น ScaleType.FIT_XY ตามJavadocsสิ่งนี้จะยืดภาพให้พอดีกับพื้นที่ทั้งหมดโดยเปลี่ยนอัตราส่วนถ้าจำเป็น นั่นจะอธิบายพฤติกรรมที่คุณเห็น

เพื่อให้ได้พฤติกรรมที่คุณต้องการ ... FIT_CENTER, FIT_START หรือ FIT_END อยู่ใกล้ แต่ถ้าภาพแคบกว่าความสูงภาพจะไม่เริ่มเต็มความกว้าง คุณสามารถดูวิธีการใช้งานได้และคุณน่าจะสามารถหาวิธีปรับเปลี่ยนตามวัตถุประสงค์ของคุณได้


2
ฉันได้ลอง FIT_CENTER แล้ว แต่ไม่ลองใช้แบบอื่น น่าเสียดายที่พวกเขาใช้ไม่ได้ทั้งสองอย่างที่ setAdjustViewBounds ตั้งค่าเป็นจริงและเท็จ มีการกำหนดขนาดความกว้างพิกเซลของหน้าจออุปกรณ์ตลอดจนความกว้าง / ความสูงของภาพที่ดาวน์โหลดและกำหนดขนาดด้วยตนเองหรือไม่?
fredley

1

ScaleType.CENTER_CROP จะทำสิ่งที่คุณต้องการ: ยืดให้เต็มความกว้างและปรับขนาดความสูงตามนั้น หากความสูงที่ปรับขนาดเกินขีด จำกัด ของหน้าจอภาพจะถูกครอบตัด


1

ดูมีวิธีแก้ปัญหาที่ง่ายกว่ามาก:

ImageView imageView;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    imageView =(ImageView)findViewById(R.id.your_imageView);
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
    Point screenSize = new Point();
    getWindowManager().getDefaultDisplay().getSize(screenSize);
    Bitmap temp = Bitmap.createBitmap(screenSize.x, screenSize.x, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(temp);
    canvas.drawBitmap(imageBitmap,null, new Rect(0,0,screenSize.x,screenSize.x), null);
    imageView.setImageBitmap(temp);
}

1

คุณสามารถใช้StretchableImageViewของฉันเพื่อรักษาอัตราส่วน (ตามความกว้างหรือตามความสูง) ขึ้นอยู่กับความกว้างและความสูงของสิ่งที่วาดได้:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

public class StretchableImageView extends ImageView{

    public StretchableImageView(Context context) {
        super(context);
    }

    public StretchableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public StretchableImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if(getDrawable()!=null){
            if(getDrawable().getIntrinsicWidth()>=getDrawable().getIntrinsicHeight()){
                int width = MeasureSpec.getSize(widthMeasureSpec);
                int height = width * getDrawable().getIntrinsicHeight()
                            / getDrawable().getIntrinsicWidth();
                setMeasuredDimension(width, height);
            }else{
                int height = MeasureSpec.getSize(heightMeasureSpec);
                int width = height * getDrawable().getIntrinsicWidth()
                            / getDrawable().getIntrinsicHeight();
                setMeasuredDimension(width, height);
            }
        }
    }
}

0

สำหรับฉันแล้ว android: scaleType = "centerCrop" ไม่สามารถแก้ปัญหาของฉันได้ มันขยายภาพได้มากขึ้นจริงๆ ดังนั้นฉันจึงลองใช้ android: scaleType = "fitXY" และมันก็ใช้งานได้ดี


0

ทำงานได้ดีตามความต้องการของฉัน

<ImageView android:id="@+id/imgIssue" android:layout_width="fill_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitXY"/>

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