如何按比例缩放任何宽度等于“match_parent”的图像(imageview)?

时间:2013-10-16 08:45:03

标签: android android-layout android-imageview android-image android-drawable

我可能有不同的drawables(大或小),我总是跨越宽度(match_parent)并按比例增加或减少高度。维持比率。

这怎么可能?

我尝试过:

<ImageView
            android:id="@+id/iv_TEST"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
android:adjustViewBounds="true"
            android:scaleType="fitXY"
            android:src="@drawable/test" />

问题是它增加或减少了宽度,看起来很糟糕。

enter image description here

1 个答案:

答案 0 :(得分:11)

固定。要解决此问题,您需要执行以下操作:

  1. 自定义ImageView
  2. 从代码("android:src"
  3. 将drawable设置为imageview.setImageResource()

    用ResizableImageView替换ImageView:

    <"the name of your package".ResizableImageView
                android:id="@+id/iv_test"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />
    

    <强> ResizableImageView.class

        public class ResizableImageView extends ImageView {
            public ResizableImageView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
    
            public ResizableImageView(Context context) {
                super(context);
            }
    
            @Override
            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                Drawable d = getDrawable();
                if (d == null) {
                    super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
                    return;
                }
    
                int imageHeight = d.getIntrinsicHeight();
                int imageWidth = d.getIntrinsicWidth();
    
                int widthSize = MeasureSpec.getSize(widthMeasureSpec);
                int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    
                float imageRatio = 0.0F;
                if (imageHeight > 0) {
                    imageRatio = imageWidth / imageHeight;
                }
                float sizeRatio = 0.0F;
                if (heightSize > 0) {
                    sizeRatio = widthSize / heightSize;
                }
    
                int width;
                int height;
                if (imageRatio >= sizeRatio) {
                    // set width to maximum allowed
                    width = widthSize;
                    // scale height
                    height = width * imageHeight / imageWidth;
                } else {
                    // set height to maximum allowed
                    height = heightSize;
                    // scale width
                    width = height * imageWidth / imageHeight;
                }
    
                setMeasuredDimension(width, height);
            }
        }
    

    解决方案:I need to size the imageView inside my table row programatically