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比較着学习,他们既相似又有一定的差别。