縦横比を保ったまま、高さに合わせたいという要望があります。画像は次のとおりです。
縦横比を維持しながら、赤い帯を灰色の行の高さに合わせたいと思います (ImageView の幅を大きくする必要があります)。xml で scaleType 属性を試してみましたが、思いどおりに動作しません。
何か提案はありますか?
縦横比を保ったまま、高さに合わせたいという要望があります。画像は次のとおりです。
縦横比を維持しながら、赤い帯を灰色の行の高さに合わせたいと思います (ImageView の幅を大きくする必要があります)。xml で scaleType 属性を試してみましたが、思いどおりに動作しません。
何か提案はありますか?
カスタム 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);
}
}