Холст Android Studio: рисование слишком большого растрового изображения

Я использую Ubuntu 16.04. И в Android Studio, когда я пытаюсь запустить свое приложение в эмуляторе, я получаю следующую ошибку:

ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: здесь имя проекта, PID: 2528 java.lang.RuntimeException: Canvas: попытка нарисовать слишком большой (216090000 байт) растровый рисунок. на android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260) на android.graphics.Canvas.drawBitmap(Canvas.java:1415) на android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:528) на андроид. widget.ImageView.onDraw(ImageView.java:1316) на android.view.View.draw(View.java:17185) на android.view.View.updateDisplayListIfDirty(View.java:16167) на android.view.View.draw(View.java:16951) в android.view.ViewGroup.drawChild(ViewGroup.java:3727) в android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513) в android.view.View.updateDisplayListIfDirty(View.java: 16162) в android.view.View.draw(View.java:16951) в android.view.ViewGroup.drawChild(ViewGroup.java:3727) в android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513) в
так далее...

Однако мне пришлось пройти через несколько циклов, чтобы заставить работать мой эмулятор, но мне нужно было создать символическую ссылку, чтобы я мог запустить эмулятор на AMD. Не уверен, если это является частью проблемы. И за свою жизнь я не могу понять, почему он продолжает это делать. В моей группе есть другие, которые просто эмулируют проект на одном и том же эмулированном телефоне и SDK.

Ответ 1

Переместите ваше изображение в (hi-res) drawable в drawable-xxhdpi. Но при разработке приложений вам не нужно использовать большое изображение. Это увеличит размер вашего APK файла.

Ответ 2

У меня такая же проблема. Если вы попытаетесь загрузить изображение, которое слишком велико, на некоторых устройствах с низким разрешением, приложение рухнет. Вы можете сделать несколько изображений разных размеров (hdpi, xxdpi и более) или просто использовать внешнюю библиотеку для загрузки изображений, которые решают проблему быстро и эффективно. Я использовал библиотеку Glide (вы можете использовать другую библиотеку, такую как Picasso).

    panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back);
    Glide
            .with(this)
            .load(MyViewUtils.getImage(R.drawable.wallpaper)
            .into(panel_IMG_back);

Ответ 3

Оказывается, проблема была основным изображением, которое мы использовали в нашем приложении в то время. Фактический размер изображения был слишком большим, поэтому мы сжимали его. Затем он работал как шарм, без потери качества, и приложение отлично работало на эмуляторе.

Ответ 4

В моем случае, перемещение (hi-res) растрового изображения всплеска от drawable до drawable-xxhdpi было решением.

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

Заставка в моем случае имеет разрешение xxhdpi, и она была ошибочно помещена в папку с возможностью переноса, а не drawable-xxhdpi. Это заставило Android предположить, что заставка имеет разрешение mdpi и масштабирует изображение до 3 * 3 раза, когда требуется размер, и пытается создать растровое изображение.

Ответ 5

В моем случае мне пришлось удалить платформу Android и добавить его снова. Что-то застряло, и копирование всего моего кода в другое приложение работало как чудо - отсюда моя идея очистить сборку для Android путем удаления платформы.

cordova platform remove android
cordova platform add android

Я думаю, это какая-то уборка, которую вы должны делать время от времени :-(

Ответ 6

Для этой ошибки, как говорили другие, было большое изображение (1800px X 900px), которое находилось в каталоге drawable, я отредактировал изображение и пропорционально уменьшил размер с помощью фотошопа, и это сработало... !!

Ответ 7

Это может быть проблемой с Glide. Используйте это, когда вы пытаетесь загрузить много изображений, и некоторые из них очень большие:

Glide.load("your image path")
                       .transform(
                               new MultiTransformation<>(
                                       new CenterCrop(),
                                       new RoundedCorners(
                                               holder.imgCompanyLogo.getResources()
                                                       .getDimensionPixelSize(R.dimen._2sdp)
                                       )
                               )
                       )
                       .error(R.drawable.ic_nfs_default)
                       .into(holder.imgCompanyLogo);
           }