问题
I have an ImageView in a 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" />
It works on many devices (phones and tablets) and emulators, but does not work on Google Nexus 5 with Android 6. The application works perfectly but the ImageView background is not displayed.
(Image is in drawable folder and I change the image with setImageResource)
回答1:
I also got the same problem, in which my image show in all android version rest of Android 6.0. I was testing my application in android 5.0 and android 6.0, that time image shown properly in android 5.0 but in android 6.0 image does not load in Imageview.
I have used src and background both property but did not get the image in Imageview in android 6.0.
Then, To solve this problem I checked my logcat and I got below string in logcat.
W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3240x5760, max=4096x4096)
I searched related this string and got the solution for this, it is Android 6.0 does not give permission to do the heavy process in UI Thread. If your image is small in size and resolution, then you can use src or background for the load it. but your image is too heavy then Android 6.0 skip this process in UI Thread.
But, You can solve this by use of below solutions.
Solution 1:
Resolve it by use of third party library like Glide for load heavy images. I have solved it with the use of this.
Solution 2:
Add a drawable-nodpi
folder in res
, put the image in it and simply use it with src in Imageview tag.
回答2:
Images come in all shapes and sizes. In many cases they are larger than required for a typical application user interface (UI). For example, the system Gallery application displays photos taken using your Android devices's camera which are typically much higher resolution than the screen density of your device.
Given that you are working with limited memory, ideally you only want to load a lower resolution version in memory. The lower resolution version should match the size of the UI component that displays it. An image with a higher resolution does not provide any visible benefit, but still takes up precious memory and incurs additional performance overhead due to additional on the fly scaling.
Displays an arbitrary image, such as an icon. The ImageView class can load images from various sources (such as resources or content providers), takes care of computing its measurement from the image so that it can be used in any layout manager, and provides various display options such as scaling and tinting.
Remove
android:adjustViewBounds="true"
Use Small Size (Resolution) oriented image .
Advice
You can use public void setImageResource (int resId)
Sets a drawable as the content of this ImageView.
This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup. If that's a concern, consider using setImageDrawable(android.graphics.drawable.Drawable) or setImageBitmap(android.graphics.Bitmap) and BitmapFactory instead.
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageResource(R.drawable.image1);
Read Drawable-hdpi, Drawable-mdpi, Drawable-ldpi Android
To declare different layouts and bitmaps you'd like to use for the different screens, you must place these alternative resources in separate directories/folders.
This means that if you generate a 200x200 image for xhdpi devices, you should generate the same resource in 150x150 for hdpi, 100x100 for mdpi, and 75x75 for ldpi devices.
回答3:
I was also facing slightly different image view issue on Nexus 5 with 6.0. It was like, image was coming when I reached to the page (having custom keyboard) but if I tap on device back button, image view was hiding (Hiding Custom keyboard).
So what I did, I removed the android:adjustViewBounds="true from the layout, for me its working fine. If you want, you can remove scaletype also. Still don't know why its happening. I am waiting for proper solution.
回答4:
move your image to drawable-nodpi instead of drawable.
Basically if u put a image in drawable folder it will be treated as drawable-mdpi so android will resize to fit xxhdpi that is nexus 5 , and since the bitmap becomes large it wont display
回答5:
I was able to load an imageView on API23.
回答6:
I had faced similar issue when the image was not getting displayed on certain Mi, Vaio devices. I narrowed it down to be the problem of image resolution being too high for those specific devices. So I used Glide image loader library to lower the resolution of an image only while opening it on image view(else the orignal size was saved in SD card) using the following code.
Glide.with(context).load(imagePath).override(1280,720).fitCenter().into(imageView);
来源:https://stackoverflow.com/questions/33204925/imageview-is-not-shown-in-nexus-5-android-6-0