ImageView не отображается в Nexus 5 (Android 6.0)

У меня есть ImageView в RelativeLayout:

    <ImageView
        android:id="@+id/image"
        android:src="@drawable/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

Он работает на многих устройствах (телефонах и планшетах) и эмуляторах, но не работает на Google Nexus 5 с Android 6. Приложение работает отлично, но фон ImageView не отображается.

(Изображение находится в папке с возможностью переноса, и я меняю изображение с помощью setImageResource)

Ответ 1

У меня также была та же проблема, в которой мое изображение отображается во всех версиях Android версии Android 6.0. Я тестировал свое приложение в android 5.0 и android 6.0, это изображение времени, отображаемое правильно в android 5.0, но в изображении Android не загружается в Imageview.

Я использовал свойство src и background как свойство, но не получил изображение в Imageview в android 6.0.

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

W/OpenGLRenderer: битмап слишком большой, чтобы быть загруженным в текстуру (3240x5760, max = 4096x4096)

Я искал соответствующую строку и получил решение для этого, это Android 6.0 не дает разрешения сделать тяжелый процесс в потоке пользовательского интерфейса. Если ваше изображение невелики по размеру и разрешению, вы можете использовать src или background для его загрузки. но ваш образ слишком тяжелый, а Android 6.0 пропускает этот процесс в потоке пользовательского интерфейса.

Но вы можете решить это, используя приведенные ниже решения.

Решение 1:

Решите его, используя стороннюю библиотеку, например Glide для загрузки тяжелых изображений. Я решил это с помощью этого.

Решение 2:

Добавьте папку drawable-nodpi в res, поместите изображение в нее и просто используйте ее с src в теге Imageview.

введите описание изображения здесь

Ответ 2

Я также столкнулся с немного другой проблемой просмотра изображений на Nexus 5 с 6.0. Это было похоже на то, что изображение приближалось, когда я дошел до страницы (с пользовательской клавиатурой), но если я нажму кнопку "Назад", изображение будет скрываться ( "Скрытие пользовательской клавиатуры" ).

Итак, что я сделал, я удалил android: adjustViewBounds = "true из макета, для меня он отлично работает. Если вы хотите, вы также можете удалить scaletype.  Все еще не знаю, почему это происходит. Я жду подходящего решения.

Ответ 3

переместите свое изображение на drawable-nodpi, а не на растягиваемое.

В принципе, если u помещает изображение в папку с возможностью переноса, он будет обрабатываться как drawable-mdpi, поэтому андроид изменит размер, чтобы соответствовать xxhdpi, который является nexus 5, и поскольку битмап становится большим, он не будет отображать

Ответ 4

Изображения бывают всех форм и размеров. Во многих случаях они больше чем требуется для типичного пользовательского интерфейса приложения (UI). Для Например, приложение системы Галерея отображает фотографии, сделанные с использованием ваша камера Android-устройств, которые обычно намного выше чем плотность экрана вашего устройства.

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

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

  • Удалить android:adjustViewBounds="true"

  • Используйте Малый размер (разрешение) ориентированного изображения.

Совет

Вы можете использовать public void setImageResource (int resId)

Устанавливает возможность рисования в качестве содержимого этого ImageView.

Это делает растровое чтение и декодирование в потоке пользовательского интерфейса, что может вызывают латентную икоту. Если это вызывает озабоченность, подумайте об использовании setImageDrawable (android.graphics.drawable.Drawable) или setImageBitmap (android.graphics.Bitmap) и BitmapFactory.

    ImageView imageView = (ImageView) findViewById(R.id.image);
    imageView.setImageResource(R.drawable.image1);

Прочитайте Drawable-hdpi, Drawable-mdpi, Drawable-ldpi Android

Чтобы объявить разные макеты и растровые изображения, которые вы хотите использовать для на разных экранах, вы должны разместить эти альтернативные ресурсы в отдельные каталоги/папки.

Это означает, что если вы создаете образ 200x200 для устройств xhdpi, вы должен генерировать тот же ресурс в 150x150 для hdpi, 100x100 для mdpi и 75x75 для устройств ldpi.

Ответ 5

Мне удалось загрузить imageView на API23.

введите описание изображения здесь

Ответ 6

У меня возникла аналогичная проблема, когда изображение не отображалось на некоторых устройствах Mi, Vaio. Я сузил его, чтобы проблема с разрешением изображения была слишком высокой для этих конкретных устройств. Поэтому я использовал Glide библиотеку загрузчика изображений, чтобы уменьшить разрешение изображения только при открытии его на изображении (иначе размер orignal был сохранен в SD-карту), используя следующий код.

Glide.with(context).load(imagePath).override(1280,720).fitCenter().into(imageView);