我在RelativeLayout中有一个ImageView:
<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" />
它适用于许多设备(手机和平板电脑)和模拟器,但不适用于使用Android 6的Google Nexus 5.应用程序运行良好,但不显示ImageView背景。
(图像在drawable文件夹中,我用setImageResource更改图像)
答案 0 :(得分:16)
我也遇到了同样的问题,其中我的图像显示在Android 6.0的所有Android版本中。 我在android 5.0和android 6.0中测试我的应用程序,那个时间图像在android 5.0中正确显示但在android 6.0图像中没有在Imageview中加载。
我已经使用src和background这两个属性但是没有在Android 6.0中的Imageview中获取图像。
然后,为了解决这个问题,我检查了我的logcat,并在logcat中得到了以下字符串。
W / OpenGLRenderer:位图太大而无法上传到纹理中(3240x5760,max = 4096x4096)
我搜索了相关的这个字符串并得到了解决方案,这是Android 6.0不允许在UI线程中执行繁重的过程。如果您的图像尺寸和分辨率很小,那么您可以使用src或background来加载它。但是你的图像太重了,Android 6.0在UI线程中跳过了这个过程。
但是,您可以使用以下解决方案解决此问题。
解决方案1 :
使用第三方库(如Glide)解决此问题,以加载大量图像。 我用这个来解决它。
解决方案2 :
在drawable-nodpi
中添加res
文件夹,将图片放入其中,然后将其与Imageview标记中的src一起使用。
答案 1 :(得分:3)
图像有各种形状和大小。在许多情况下,它们更大 比典型的应用程序用户界面(UI)所需。对于 例如,系统库应用程序显示使用的照片 您的Android设备的相机通常要高得多 分辨率高于设备的屏幕密度。
鉴于您正在使用有限的内存,理想情况下您只想在内存中加载较低分辨率的版本。较低分辨率版本应与显示它的UI组件的大小相匹配。具有更高分辨率的图像不会提供任何明显的好处,但仍会占用宝贵的内存,并且由于额外的动态扩展而产生额外的性能开销。
显示任意图像,例如图标。 ImageView类可以 从各种来源(例如资源或内容)加载图像 提供者),负责从图像计算其测量 它可以在任何布局管理器中使用,并提供各种 显示缩放和着色等选项。
删除android:adjustViewBounds="true"
使用小尺寸(分辨率)图像。
您可以使用public void setImageResource (int resId)
将drawable设置为此ImageView的内容。
这可以在UI线程上进行Bitmap读取和解码 导致延迟打嗝。如果这是一个问题,请考虑使用 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
要声明您想要使用的不同布局和位图 不同的屏幕,你必须放置这些替代资源 单独的目录/文件夹。
这意味着如果您为xhdpi设备生成200x200图像,则表示您 应该在150x150中生成相同的资源用于hdpi,100x100用于 mdpi和ldpi设备的75x75。
答案 2 :(得分:1)
我在Nexus 5 6.0上也遇到了略微不同的图像查看问题。就像,当我到达页面(有自定义键盘)时图像即将到来,但如果我点击设备后退按钮,图像视图就隐藏了(隐藏自定义键盘)。
所以我做了什么,我从布局中删除了 android:adjustViewBounds =“true ,对我来说工作正常。如果你愿意,你也可以删除scaletype。 仍然不知道为什么会发生这种情况。我在等待正确的解决方案。
答案 3 :(得分:1)
将您的图像移动到drawable-nodpi而不是drawable。
基本上,如果你把图像放在drawable文件夹中,它将被视为drawable-mdpi,所以android会调整大小以适应xxhdpi,即nexus 5, 并且由于位图变大,它不会显示
答案 4 :(得分:0)
答案 5 :(得分:0)
当某些Mi,Vaio设备上没有显示图像时,我遇到了类似的问题。我将其缩小为图像分辨率对于那些特定设备来说太高的问题。因此,我使用Glide图像加载器库来降低图像的分辨率,只有在图像视图上打开它时(否则原始大小保存在SD卡中)使用以下代码。
Glide.with(context).load(imagePath).override(1280,720).fitCenter().into(imageView);