Как масштабировать изображение в ImageView, чтобы сохранить соотношение сторон - PullRequest
480 голосов
/ 26 марта 2010

В Android я определил ImageView layout_width как fill_parent (что занимает всю ширину телефона).

Если изображение, которое я поместил в ImageView, больше, чем layout_width, Android будет масштабировать его, верно? Но как насчет высоты? Когда Android масштабирует изображение, оно сохранит соотношение сторон?

Что я обнаружил, так это то, что в верхней и нижней части ImageView есть пробелы, когда Android масштабирует изображение, которое больше ImageView. Это правда? Если да, как я могу устранить этот пробел?

Ответы [ 25 ]

0 голосов
/ 04 января 2016

Передайте свой ImageView и, основываясь на высоте и ширине экрана, вы можете сделать его

    public void setScaleImage(EventAssetValueListenerView view){
        // Get the ImageView and its bitmap
        Drawable drawing = view.getDrawable();
        Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
        // Get current dimensions
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        float xScale = ((float) 4) / width;
        float yScale = ((float) 4) / height;
        float scale = (xScale <= yScale) ? xScale : yScale;

        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);

        Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        BitmapDrawable result = new BitmapDrawable(scaledBitmap);
        width = scaledBitmap.getWidth();
        height = scaledBitmap.getHeight();

        view.setImageDrawable(result);

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
        params.width = width;
        params.height = height;
        view.setLayoutParams(params);
    }

0 голосов
/ 19 июля 2013
myImageView.setAdjustViewBounds(true);
0 голосов
/ 29 января 2019

Вы можете масштабировать изображение, которое также уменьшит размер вашего изображения. Для этого есть библиотека, которую вы можете скачать и использовать. https://github.com/niraj124124/Images-Files-scale-and-compress.git

Как использовать 1) Импортировать компрессор-v1.0. баночка для вашего проекта. 2) Добавьте приведенный ниже пример кода для тестирования. ResizeLimiter resize = ImageResizer.build (); resize.scale ("inputImagePath", "outputImagePath", imageWidth, imageHeight); По вашему требованию есть еще много методов

0 голосов
/ 11 июня 2019

Вот как у меня это работало в ConstraintLayout:

<ImageView
    android:id="@+id/myImg"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"/>

Затем в коде я устанавливаю drawable как:

ImageView imgView = findViewById(R.id.myImg);
imgView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.image_to_show, null));

Это хорошо вписывается в изображение в соответствии с его соотношением сторон и держит его в центре.

0 голосов
/ 24 августа 2013
imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 130, 110, false));
...