Ich brauchte eine ImageView und eine Bitmap, damit die Bitmap auf die ImageView-Größe skaliert wird und die Größe der ImageView der skalierten Bitmap entspricht :).
Ich habe in diesem Beitrag nachgesehen, wie es geht, und schließlich getan, was ich will, aber nicht wie hier beschrieben.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/acpt_frag_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/imageBackground"
android:orientation="vertical">
<ImageView
android:id="@+id/acpt_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:layout_margin="@dimen/document_editor_image_margin"
android:background="@color/imageBackground"
android:elevation="@dimen/document_image_elevation" />
und dann in der onCreateView-Methode
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_scanner_acpt, null);
progress = view.findViewById(R.id.progress);
imageView = view.findViewById(R.id.acpt_image);
imageView.setImageBitmap( bitmap );
imageView.getViewTreeObserver().addOnGlobalLayoutListener(()->
layoutImageView()
);
return view;
}
und dann layoutImageView () Code
private void layoutImageView(){
float[] matrixv = new float[ 9 ];
imageView.getImageMatrix().getValues(matrixv);
int w = (int) ( matrixv[Matrix.MSCALE_X] * bitmap.getWidth() );
int h = (int) ( matrixv[Matrix.MSCALE_Y] * bitmap.getHeight() );
imageView.setMaxHeight(h);
imageView.setMaxWidth(w);
}
Das Ergebnis ist, dass das Bild perfekt hineinpasst, das Seitenverhältnis beibehält und keine zusätzlichen Pixelreste aus ImageView enthält, wenn sich die Bitmap darin befindet.
Ergebnis
Es ist wichtig, dass ImageView wrap_content und adjustViewBounds auf true setzt. Dann funktionieren setMaxWidth und setMaxHeight. Dies ist im Quellcode von ImageView geschrieben.
/*An optional argument to supply a maximum height for this view. Only valid if
* {@link #setAdjustViewBounds(boolean)} has been set to true. To set an image to be a
* maximum of 100 x 100 while preserving the original aspect ratio, do the following: 1) set
* adjustViewBounds to true 2) set maxWidth and maxHeight to 100 3) set the height and width
* layout params to WRAP_CONTENT. */
ImageView
auf die Bildgröße ändern ? Zum Beispiel würde ein Bild von 100 dp x 150 dpImageView
auf die gleichen Maße skaliert ? Oder meinst du, wie man das Bild auf dieImageView
Grenzen skaliert ? Beispielsweise würde ein Bild von 1000 dp x 875 dp in 250 dp x 250 dp skaliert. Müssen Sie das Seitenverhältnis beibehalten?