Android ImageView适合保持高度的纵横比

Android ImageView适合保持高度的纵横比,android,android-imageview,Android,Android Imageview,我有一个目标,我想适合的高度,保持高宽比。图为: 我希望红色带与灰色行的高度相匹配,保持其纵横比(ImageView的宽度应增加)。 我尝试过xml中的scaleType属性,但没有一个能像我所希望的那样工作 有什么建议吗 您应该能够更改自定义ImageView的此代码: 保持纵横比 将图像拉伸到imageview的宽度 必要时作物高度溢出 代码: public class ImageViewScaleTypeTopCrop extends ImageView { public I

我有一个目标,我想适合的高度,保持高宽比。图为:

我希望红色带与灰色行的高度相匹配,保持其纵横比(ImageView的宽度应增加)。 我尝试过xml中的scaleType属性,但没有一个能像我所希望的那样工作


有什么建议吗

您应该能够更改自定义ImageView的此代码:

  • 保持纵横比
  • 将图像拉伸到imageview的宽度
  • 必要时作物高度溢出
代码:

public class ImageViewScaleTypeTopCrop extends ImageView {
    public ImageViewScaleTypeTopCrop(Context context) {
        super(context);
        setup();
    }

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

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

    private void setup() {
        setScaleType(ScaleType.MATRIX);
    }

    @Override
    protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {

        float frameWidth = frameRight - frameLeft;
        float frameHeight = frameBottom - frameTop;

        if (getDrawable() != null) {

            Matrix matrix = getImageMatrix();
            float scaleFactor, scaleFactorWidth, scaleFactorHeight;

            scaleFactorWidth = (float) frameWidth / (float) getDrawable().getIntrinsicWidth();
            scaleFactorHeight = (float) frameHeight / (float) getDrawable().getIntrinsicHeight();

            if (scaleFactorHeight > scaleFactorWidth) {
                scaleFactor = scaleFactorHeight;
            } else {
                scaleFactor = scaleFactorWidth;
            }

            matrix.setScale(scaleFactor, scaleFactor, 0, 0);
            setImageMatrix(matrix);
        }

        return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
    }

}

你曾经搜索过吗?我认为回答你的问题是没有用的。如果你知道如何解决这个问题,请告诉我。