在Nexus 5(Android 6.0)中未显示imageView

时间:2015-10-19 00:39:11

标签: java android nexus-5

我在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更改图像)

6 个答案:

答案 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一起使用。

enter image description here

答案 1 :(得分:3)

  

图像有各种形状和大小。在许多情况下,它们更大   比典型的应用程序用户界面(UI)所需。对于   例如,系统库应用程序显示使用的照片   您的Android设备的相机通常要高得多   分辨率高于设备的屏幕密度。

鉴于您正在使用有限的内存,理想情况下您只想在内存中加载较低分辨率的版本。较低分辨率版本应与显示它的UI组件的大小相匹配。具有更高分辨率的图像不会提供任何明显的好处,但仍会占用宝贵的内存,并且由于额外的动态扩展而产生额外的性能开销。

  

显示任意图像,例如图标。 ImageView类可以   从各种来源(例如资源或内容)加载图像   提供者),负责从图像计算其测量   它可以在任何布局管理器中使用,并提供各种   显示缩放和着色等选项。

  1. 删除android:adjustViewBounds="true"

  2. 使用小尺寸(分辨率)图像

  3. 建议

    您可以使用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)

我能够在API23上加载imageView。

enter image description here

答案 5 :(得分:0)

当某些Mi,Vaio设备上没有显示图像时,我遇到了类似的问题。我将其缩小为图像分辨率对于那些特定设备来说太高的问题。因此,我使用Glide图像加载器库来降低图像的分辨率,只有在图像视图上打开它时(否则原始大小保存在SD卡中)使用以下代码。

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