Избегайте масштабирования изображения в ImageView

Я использую представление изображения с этими атрибутами XML

<ImageView
    android:id="@+id/widget_list_bitmap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:scaleType="center"
    android:src="@drawable/place_holder" >
</ImageView>

и во время выполнения я создаю, скажем, растровое изображение 400x400, сохраняю его в файл и устанавливаю ImageView src, используя URI файла

remoteViews.setUri(R.id.widget_list_bitmap, "setImageURI", myFileUri);

(это сделано для того, чтобы избежать проблем RemoteViews с большими растровыми изображениями).

Все работает нормально, за исключением того, что отображаемое изображение уменьшено и меньше 400x400, больше похоже на 250x250 (возможно, 400/плотность, плотность = 1,5).

Есть ли способ заставить ImageView действительно не масштабировать изображения, которые он извлекает из URI?


person user1139880    schedule 02.03.2012    source источник


Ответы (1)


Вы можете загрузить его вручную и при загрузке с помощью BitmapFactory установить inScaled< /a> в ложь. Затем вы должны использовать setImageViewBitmap< /a> вместо setUri или setImageViewUri.

Обновление:

К сожалению, я не вижу способа обойти это с помощью setUri. Альтернативой использованию setUri для обхода ограничения в 1 МБ является использование setImageViewBitmap, но нарезка растрового изображения и отображение его в нескольких представлениях, возможно, в сетке 2x2 или 3x3 ImageViews или что-то в этом роде. Вам придется разделить его на несколько обновлений, используя partiallyUpdateAppWidget, но я думаю, что это должно сработать. Загвоздка в том, что для этого требуется API 11.

person kabuko    schedule 02.03.2012
comment
RemoteViews имеет проблемы с большими растровыми изображениями. Вот почему я пошел по маршруту URI. Дополнительную информацию можно найти здесь groups.google.com/forum/ #!topic/android-developers/KKEyW6XdDvg/ - person user1139880; 02.03.2012
comment
Обновлено другим возможным решением ограничения в 1 МБ. - person kabuko; 02.03.2012
comment
Не является прямым ответом на мой вопрос, но решает мою основную проблему, поэтому помечает ее как решение (должен ли я редактировать заголовок?). Кажется, что нарезка работает (с использованием 3 изображений ImageView в вертикальном LinearLayout). В настоящее время я делаю три регулярных обновления. Не знал о частичном обновлении AppWidget, посмотрю, попробую. Спасибо. - person user1139880; 02.03.2012
comment
Обновление: частично UpdateAppWidget доступен только из API 11 (я использую 8). Нарезка с использованием updateAppWidget() работает, но примерно раз в 20 обновлений я все равно получаю ошибку привязки. Попробуйте выполнить System.gc() после обновления каждого фрагмента изображения, что улучшит ситуацию, но все же не на 100% надежно. Все еще ищу решение, как избежать масштабирования ImageView с помощью setUri. - person user1139880; 03.03.2012
comment
Также нашел это обсуждение, если кому-то интересно. groups.google.com/forum/#!topic/android- разработчики/KKEyW6XdDvg/ - person user1139880; 03.03.2012