Android Outofmemory можно рисовать

Это мой drawable в массиве для моего viewpager, когда я запускаю его, я получаю сообщение об ошибке нехватки памяти, есть ли способ уменьшить размер изображения или что-то еще? Я делаю много поиска, но я не могу их использовать... пожалуйста, помогите...

GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break

@Override
public Object instantiateItem(ViewGroup container, int position) {

    ImageView imageView = new ImageView(context);
    final int temp = position;
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);

    ((ViewPager) container).addView(imageView, 0);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {}
    });
    return imageView;
}

6 ответов

Решение

Это известная ошибка, но не из-за больших файлов. Так как Android кэширует Drawables, ему не хватает памяти после использования нескольких изображений. Но я нашел альтернативный способ, пропустив систему кеширования Android по умолчанию.

Soultion: создайте в ресурсах папку для рисования и переместите изображения в папку "Drawable" в активах и используйте следующую функцию для получения BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException {
    AssetManager assets = context.getResources().getAssets();
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
    Bitmap bitmap = BitmapFactory.decodeStream(buffer);
    return new BitmapDrawable(context.getResources(), bitmap);
}

Ссылка: https://stackru.com/posts/6116316/revisions

Кроме того, добавьте строку ниже в вашем файле манифеста

android:largeHeap="true"

Попробуйте переместить ваши элементы рисования с более низкого MPI на HDPI или даже в папки более высокого размера, такие как XHDPI, в зависимости от вашего разрешения.

Размеры моих изображений варьировались от 400 до 800 пикселей. Я сохранил свои рисованные объекты в MDPI, который выбрасывал OutOfMemory на моем Galaxy S4. Я переместил их в HDPI, и это решило проблему.

Как упомянул Мухаммед, попробуйте переместить ваши изображения с возможностью рисования(или MDPI) в другую папку измерений, как HDPI или выше.

Всегда старайтесь использовать сжатые PNG, насколько это возможно. Есть много онлайн-сайтов, которые можно сжать в очень большом масштабе.

ссылка: http://developer.android.com/guide/practices/screens_support.html

Пока ваши изображения не очень большие по размеру, вы можете использовать папку drawable-nodpi для ваших PNG. Я могу подтвердить, что это решило проблему для меня.

Добавлять android:largeHeap:"true" в свой файл манифеста и переместите ваши нарисованные изображения в папку mipmap-hopi,

[android] [java] [android-studio]

@Muhammad, упомянутый здесь ранее, создание нескольких изображений (hdpi, ldpi,mdpi,xdpi и т. д.) решило проблему для меня.

потому что мне потребовалось некоторое время, чтобы понять, как добавить эти файлы, вот несколько экранов печати, которые объясняют это: Drawable ->New -> Batch Drawable Import (для нескольких файлов)
затем добавьте файлы и затем выберите разрешения

Другие вопросы по тегам