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 может загружать изображения из различных источников (например, ресурсы или контент провайдеров), заботится о вычислении своих измерений из изображения, поэтому что он может использоваться в любом менеджере компоновки и предоставляет различные параметры отображения, такие как масштабирование и тонирование.
Совет
Вы можете использовать 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);