Android:如何以相同的比例展开矩形图像以适应屏幕

Android:如何以相同的比例展开矩形图像以适应屏幕,android,imageview,Android,Imageview,我的应用程序中设置了以下矩形图像 现在我试着在两边以相同的比例展开图像,直到它适合屏幕。但我无法得到预期的图像 到目前为止,我的代码是: <ImageView android:id="@+id/imgid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/shayneward" android:scaleTy

我的应用程序中设置了以下矩形图像

现在我试着在两边以相同的比例展开图像,直到它适合屏幕。但我无法得到预期的图像

到目前为止,我的代码是:

<ImageView
    android:id="@+id/imgid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/shayneward"
    android:scaleType="fitXY"/>


它不在乎图像被切断,但它应该以相同的比例在两侧展开,直到它适合屏幕。

android:scaleType=“fitXY”
更改为
android:scaleType=“centerCrop”
,以获得您想要的行为

不同的缩放选项记录在下。

尝试使用以下选项:

android:scaleType="centerCrop"
从Android文档中,center crop执行以下操作:

均匀缩放图像(保持图像的纵横比),以便 图像的两个尺寸(宽度和高度)将等于或 大于视图的相应尺寸(减去填充)


请参阅有关
ImageView的文档。如果图像太小,则可能会出现问题,因为它没有按屏幕尺寸进行缩放

我使用这个类来解决这个问题:

public class FixedCenterCrop extends ImageView {


    public FixedCenterCrop(Context context) {
        super(context);
        setScaleType(ScaleType.MATRIX);
    }

    public FixedCenterCrop(Context context, AttributeSet attrs) {
        super(context, attrs);
        setScaleType(ScaleType.MATRIX);
    }

    public FixedCenterCrop(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setScaleType(ScaleType.MATRIX);
    }


    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        recomputeImgMatrix();
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        recomputeImgMatrix();
        return super.setFrame(l, t, r, b);
    }

    private void recomputeImgMatrix() {
        final Matrix matrix = getImageMatrix();

        float scale;
        final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
        final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
        final int drawableWidth = getDrawable().getIntrinsicWidth();
        final int drawableHeight = getDrawable().getIntrinsicHeight();

        if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
            scale = (float) viewHeight / (float) drawableHeight;
        } else {
            scale = (float) viewWidth / (float) drawableWidth;
        }

        matrix.setScale(scale, scale);
        matrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight*scale)/2);
        setImageMatrix(matrix);
    }
}

非常感谢
android:scaleType=“centerCrop”
对我来说非常有效。非常有效+1对于它,这里的缩放类型是正确的,但常量是错误的——在XML中,它应该是“centerCrop”,而不是“CENTER\u CROP”。谢谢,我无意中将您使用的常量放在了编程设置中。