Android部分機型ImageView.setImageResource加載大圖顯示不出來


      項目中涉及新功能的版本上線大多會涉及新手引導頁,看似功能很簡單,但是android機型眾多,偏偏會出幺蛾子。

      最近遇到這樣的問題,在小米4和摩托羅拉XT1085兩款手機上新手引導頁(或者是開機啟動頁)展示不出來,其他手機顯示正常,原因是圖片太大了(項目中的圖片是90KB)。

以下用demo做示范,可重現項目中的問題

private ImageView img;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		img = (ImageView) findViewById(R.id.img);
		img.setImageResource(R.drawable.istrategy_create_select_chengfen);//未做處理前是90KB,UI做壓縮后是60KB
	}

上述代碼很簡單,在很多機型上都可以正常運行達到效果,但小米4和摩托羅拉XT1085上則無法顯示。

解決方法一:

drawable下的圖片istrategy_create_select_chengfen.png,讓UI人員把圖片從90KB進行了壓縮(60KB),則可正常顯示。

但是具體為什么這兩款機型中當png過大時顯示會有問題,未找到相關資料,猜測跟手機本身系統對圖片占內存大小,防止內存溢出做了控制。

解決方法二:

     使用img.setImageBitmap展示圖片,即:

img.setImageResource(R.drawable.istrategy_create_select_chengfen);改為img.setImageBitmap(bitmap);
具體png轉bitmap的方法網上有很多,不再介紹。

最簡單是就是Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.istrategy_create_select_chengfen);

img.setImageBitmap(bitmap);
但是需要注意decodeResource方法容易發生OOM內存溢出。


解決方法三:
google新推出的一種圖片格式.webp,
webp格式的圖片比png圖片占用空間小,但是需要android4.0以上支持,4.0以下需要導入.so。如果項目是與C交互的,可以考慮用此方法。

.webp相關知識可參考:  http://www.cnblogs.com/tianzhijiexian/p/4398540.html

具體使用過程:

 1、下載iSparta軟件,選擇*.png文件,轉換成*.webp格式;

 2、轉換好的圖片可以使用google chrome瀏覽器打開,查看圖片是否正常展示;

 3、*.webp圖片替換工程中相應drawble下的.png圖片(刪掉*.png,直接使用*.webp即可)

 4、工程代碼中仍舊使用img.setImageResource(R.drawable.istrategy_create_select_chengfen);即可

總之,上述3中方法都是不同方式的把png圖片進行壓縮再進行展示,具體個別手機上會出現這種問題的原因還有待研究。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM