1

縦横比を保ったまま、高さに合わせたいという要望があります。画像は次のとおりです。

ここに画像の説明を入力

縦横比を維持しながら、赤い帯を灰色の行の高さに合わせたいと思います (ImageView の幅を大きくする必要があります)。xml で scaleType 属性を試してみましたが、思いどおりに動作しません。

何か提案はありますか?

4

1 に答える 1

2

カスタム 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);
    }

}
于 2013-08-01T09:26:53.363 に答える