Android: загруженный набор изображений в ImageView меньше, чем изображение того же размера, из комплекта - PullRequest
0 голосов
/ 05 марта 2012

Я довольно смущен.

У меня есть приложение, которое имеет матрицу из девяти кнопок изображения 3 x 3

Центральная кнопка имеет логотип, который загружается из идентификатора ресурса R.drawable.logo, а остальные инициализируются как изображения «пока нет изображения». Все изображения имеют размер 86 ​​x 86 и устанавливаются с помощью инструмента построения экрана.

Когда пользователь входит в систему, одно или несколько из 8 окружающих изображений будут загружены из Интернета. В основном это также 86x86.

Загруженные изображения имеют примерно половинный размер в направлениях x и y по сравнению с предварительно установленными изображениями.

Изображения проверяются и, как известно, имеют размер 86 ​​x 86 после загрузки с помощью объекта параметров bitmapFactory.

Изображения, загруженные двумя разными способами на этой странице ... Как загрузить ImageView по URL в Android?

Ответы [ 2 ]

2 голосов
/ 27 января 2016

Изображение, полученное из ресурсов, будет увеличено, если его не найти по плотности dpi целевого устройства.Например, если вы работаете на устройстве с DisplayMetrics.DENSITY_HIGH (hdpi), но у вас есть изображение только в /res/drawable-mdpi, это изображение будет автоматически увеличено при извлечении через что-то вроде getDrawable().

Однако для загруженного изображения система не знает, для какой плотности предназначено изображение, поскольку оно не содержится в папке ресурсов, в которой указана его плотность, поэтому масштабирование не может быть выполнено автоматически.Вы должны определить плотность вручную, используя BitmapFactory.Options.Рассмотрим следующую функцию:

/**
 * Downloads an image for a specified density DPI.
 * @param context the current application context
 * @param url the url of the image to download
 * @param imgDensity the density DPI the image is designed for (DisplayMetrics.DENSITY_MEDIUM, DisplayMetrics.DENSITY_HIGH, etc.)
 * @return the downloaded image as a Bitmap
 */
public static Bitmap loadBitmap(Context context, String url, int imgDensity) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    BitmapFactory.Options options = new BitmapFactory.Options();

    // This defines the density DPI the image is designed for.
    options.inDensity = imgDensity;

    // These define the density DPI you would like the image to be scaled to (if necessary).
    options.inScreenDensity = metrics.densityDpi;
    options.inTargetDensity = metrics.densityDpi;

    try {
        // Download image
        InputStream is = new java.net.URL(url).openStream();
        return BitmapFactory.decodeStream(is, null, options);
    }
    catch(Exception ex) {
        // Handle error
    }

    return null;
}

Таким образом, если ваше изображение по указанному URL предназначено для экрана с разрешением mdpi, вы должны передать DisplayMetrics.DENSITY_MEDIUM для параметра imgDensity.Если текущий контекст имеет большую плотность DPI (например, DisplayMetrics.DENSITY_HIGH), изображение будет соответственно увеличено.

0 голосов
/ 05 марта 2012

Добавьте android: scaleType = "fitXY" в ImageView.Это всегда будет отображать изображение в пределах указанной границы.

...