Я знаю, что если я загружаю изображение и устанавливаю его как источник в ImageView программно, то лучше всего сначала вычислить размер изображения с помощью inJustDecodeBounds
, выяснить, сколько масштабирования мне нужно, а затем декодировать с этим масштабированием:Будет ли Android автоматически использовать inJustDecodeBounds при установке источника ImageView в xml?
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.my_drawable, options);
float srcHeight = options.outHeight;
float srcWidth = options.outWidth;
int inSampleSize = ...; // compute
options = new BitmapFactory.Options();
options.inSampleSize = inSampleSize;
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_drawable, options);
myImageview.setImageBitmap(myBitmap);
Теперь, если я вместо этого хочу, чтобы установить это в XML , и я только обеспечиваю базовую вытяжку в /drawables
(нет других активов в /drawables-hdpi
и т.д.)
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/my_drawable"/>
Я знаю, что Android сделает какое-то масштабирование полученного растрового изображения, чтобы убедиться, что оно подходит, но будет ли оно делать это эффективно, как если бы я сам расшифровывал растровое изображение? Или он загружает весь битмап в память и , а затем масштабирует его?
Другими словами, когда Android остается на своих устройствах для повторной выборки изображения, когда я предоставляю базу /drawable
, она делает это эффективно?
Хорошее представление об испытаниях с огромным png. – tir38
спасибо, подготовитесь, чтобы увидеть, как он взорвался :) Я также обнаружил что-то новое сегодня, я положил его в ответ – lelloman
Да, попробовал огромное изображение и: бум :. Кроме того, то, что вы говорите о размере изображения в неопределенной плотности, намекается на этот похожий вопрос: http://stackoverflow.com/a/13120950/1650674. Что произойдет, если вы включите «drawable-nodpi»? – tir38