2014-01-11 3 views
1

Я использую ImageView, чтобы сделать изображение 1,3 МБ в качестве фона для деятельности. Активность имеет еще меньшее изображение (логотип) и 3 кнопки. В этом деле нет ничего другого. Теперь это действие занимает до 9 секунд для отображения. До этого приложение показывает черный экран. Когда я удалил ImageView с изображением 1,3 МБ, активность загружается мгновенно. Так нормально ли для ImageView делать так долго, чтобы загрузить изображение? Как я могу уменьшить это время?Слишком длинное изображение для загрузки в макете?

+0

использовать изображение нижнего размера как можно больше –

ответ

5

У вас есть несколько вариантов, но сначала вы должны спросить , почему я загружаю такое большое растровое изображение?

сделать файл меньше

Как @laalto говорит, регулировать размеры изображения и сделать его меньше. Вероятно, самый быстрый и простой вариант. Поскольку я не вижу изображение, я не могу сказать, будет ли это выглядеть иначе, чем у пользователя, если разрешение меньше.

Downsample Изображения

Есть много сообщений о субдискретизации больших изображений, чтобы избежать outofmemory ошибок. Here - хороший пример из команды AndroidQuery, у которой в собственном праве есть полезный library, который включает в себя такую ​​функциональность. Это также включено в сообщение.

Вы можете использовать свою библиотеку, использовать их сообщение (или подобное) для написания кода, или вы можете использовать отличную библиотеку Picasso с площади, хотя это может быть излишним.

Если имеется повторяющаяся фон ...

Вы не предоставили изображение, но если это повторяется, вы можете создать плитку вместо, а затем обеспечить это в качестве ресурса.

Так для примера, вы можете создать новый файл XML с именем background_repeat.xml, который содержит

<bitmap 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:src="@drawable/tile" 
android:tileMode="repeat" 
android:dither="true" /> 

tile где является гораздо гораздо меньше, изображение, которое вы хотите повторить.

+0

OK Я обрезал изображение, и его размер теперь составляет 360 КБ (разрешение 1501 * 2200), но все же его длина слишком длинная (4 секунды). Любые другие предложения, которые у вас есть? Благодарю. –

+0

Попробуйте ускорить использование AQuery, просто опустите банку и используйте сообщение, с которым я связан. Уменьшите размер изображения.Если он работает, решите, хотите ли вы написать свой собственный код или продолжать использовать AQuery или Picasso и т. Д. –

1

Да, это нормально. Изображение необходимо декодировать и масштабировать. Требуется время обработки и память. Обработка памяти запускает сборку мусора время от времени, замедляя процесс еще больше. Используйте профилировщик, чтобы узнать, где именно потрачено время.

Уменьшите размеры изображения, чтобы ускорить декодирование и сократить объем памяти.

+0

я действительно не хочу потерять разрешение изображения, если это возможно. Существуют ли какие-либо внешние библиотеки, которые позволяют быстрее загружать изображение? –

0

Вы можете использовать андроид: фон, чтобы установить фон фона из ресурса. А также вы можете сделать это на корневой элемент вашего XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/fragment_layout" 
    android:background="@drawable/navigation_bg"/> 
Смежные вопросы