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的button和平鋪拉伸的控件必定慘不忍睹,要盡量避免。事實上在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中的引用方式,也是使用@來引用。
所以這也是很easy的。不同像素的mipmap目錄圖片都是一樣的使用。可是注意:在AS中,同一張圖片放在drawable目錄下和放在mipmap目錄下顯示效果是不一樣的。在大小,縮放,像素上都可能有所差異。
把Android Studio和Eclipse比較着學習,他們既相似又有一定的差別。
