Android ImageView 不顯示JPEG圖片 及 Android Studio中如何引用圖片資源,
Android ImageView 不顯示JPEG圖片
今天在寫一個小執行個體,ImageView在xml裡面設定的是INVISIBLE,在代碼裡需要設定成setVisibility(View.VISIBLE),但圖片沒有顯示出來,換成PNG或其它的JPEG格式的圖片確可以正常的顯示。
原因:顯示的圖片大小為5.39K,圖片格式有損壞,所以不能正常顯示。
解決:換一張圖片,或重建JPEG圖片。
如果還是不能正常顯示,建議在設定完VISIBLE後,調用如下方法:
iv.setVisibility(View.VISIBLE);view.requestLayout();
Call this when something has changed which has invalidated the layout of this view. This will schedule a layout pass of the view tree.
我們可以理解為重新布局了一下view。
用途:有時我們在改變一個view 的內容之後可能會造成顯示出現錯誤,比如寫ListView的時候重用convertview中的某個TextView 可能因為前後填入的text長度不同而造成顯示出錯,此時我們可以在改變內容之後調用requestLayout方法加以解決。
建議:png是一種無損格式,JPG是有損格式。JPG在處理顏色很多的圖片時,根據壓縮率的不同,有時會去掉一些肉眼識別差距較小的中間顏色。但是PNG對於無損這個基本要求,會嚴格保留所有的色彩數。 所以。圖片尺寸大,或者色彩數量多特別是漸層色的多的時候,PNG的體積會明顯大於JPG。
Android的介面能用png最好是用png,因為32位的png顏色過渡平滑且支援透明。jpg是像素化壓縮過的圖片,品質已經下降了,再拿來做9patch的按鈕和平鋪展開的控制項必然慘不忍睹,要盡量避免。其實在res下icon用的都是png格式,就是說Google推薦使用的是png格式的圖片。
對於顏色繁雜的,比如照片牆紙之類的圖片(有些應用的啟動畫面喜歡搞這種),那用jpg是最好不過了,這種圖片壓縮前壓縮後肉眼分辨幾乎不計,如果儲存成png體積將是jpg的幾倍甚至幾十倍,嚴重浪費體積。
解釋:什麼是9patch,Patch的中文意思是“片,塊”的意思,那這裡按中文的意思來說就是9片或9塊。因此可想而知這個圖片會被分為9片,如所示:
9patch只解釋這麼多,需要詳細瞭解的可以繼續深入研究。
Android Studio中如何引用圖片資源
在Eclipse中根據圖片的像素大小把.png或.jpg的圖片放在drawable檔案夾下,如drawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xhdpi,drawable-xxhdpi。同一張圖片放在不同的drawable檔案夾下,顯示的時候會有所不同。但是在xml中引用的時候是一樣的:android:src=@drawable/pic 或者android:background=@drawable/pic 。
但是到Android Studio中就不一樣了,發現沒有這麼多的drawable目錄了,而只有一個drawable檔案夾。取而代之的是出現了很多mipmap檔案夾,如mipmap-hdpi,mipmap-mdpi,mipmap-xhdpi,mipmap-xxhdpi。:
首先嘗試把圖片放在drawable中,然後在xml中使用android:src=@drawable/pic或者android:background=@drawable/pic。使用,發現沒有問題,完全可以顯示。但是為什麼有這麼多mipmap呢?
Google官方的解釋是效能最佳化,佔用記憶體小等等,總之mipmap這個形式比drawable好。So,推薦我們在Android Studio中使用mipmap。那好,我們把圖片放在mipmap檔案夾下,那怎麼在xml中使用呢?
android:src=@mipmap/pic
非常類似圖片放在drawable中的引用方式,也是使用@來引用。所以這也是非常簡單的,不同像素的mipmap檔案夾圖片都是一樣的使用。但是注意:在AS中,同一張圖片放在drawable檔案夾下和放在mipmap檔案夾下顯示效果是不一樣的,在大小,縮放,像素上都可能有所差異。把Android Studio和Eclipse比較著學習,他們既相似又有一定的區別。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。