Sie müssen die Matrixskalierung verwenden und die Matrix selbst einrichten. Das ist nicht schwer.
Sie müssen dies tun, nachdem die Ansicht ausgelegt ist, so dass Sie die Abmessungen des ImageView
erhalten können. Sie benötigen außerdem die Abmessungen der Drawable
oder Bitmap
, die Sie festlegen.
Zuerst müssen Sie herausfinden, wie viel Sie zu skalieren haben (multiplizieren) das Bild, so dass die Höhe gleich der Höhe des ImageView
ist. Dazu teilen Sie einfach die Höhe ImageView
durch die Bildhöhe.
Jetzt wissen Sie auch, wie breit das Bild sein wird. Um die richtigen Kanten des Bildes und der ImageView
auszurichten, müssen Sie das Bild um seine Breite nach links verschieben und dann die Breite des ImageView
zurück verschieben. Die Übersetzung ist also nur der Unterschied zwischen der Bildbreite und der Breite ImageView
.
Hier ist, wie ich es tat:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageview);
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BitmapDrawable drawable = null;
if (Build.VERSION.SDK_INT >= 21) {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset, getTheme());
} else {
drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.sunset);
}
Bitmap bitmap = drawable.getBitmap();
// get the scale factor that will have to be applied to
// the image to make it the same height as your ImageView
float factor = (float) imageView.getHeight()/(float) bitmap.getHeight();
// now the image will have to be shifted over all of its
// width minus the width of the ImageView. This will make
// the right edges line up.
int scaledImageWidth = (int) (bitmap.getWidth() * factor);
int translateX = imageView.getWidth() - scaledImageWidth;
// you can also use drawable.getIntrinsicWidth() and
// drawable.getIntrinsicHeight()
Matrix matrix = new Matrix();
matrix.setScale(factor, factor);
matrix.postTranslate(translateX, 0);
imageView.setScaleType(ImageView.ScaleType.MATRIX);
imageView.setImageMatrix(matrix);
imageView.setImageBitmap(bitmap);
}
});
}