天天看點

Android中各種drawable的使用

轉載請說明出處,本文來自Android菜鳥:http://blog.csdn.net/android_cai_niao/article/details/46854767  QQ:2717521606

        其實這些個drawable的使用并不難,也不需要去哪裡百度或者Google找答案,直接自己試驗一下即可。

        如:ic-launcher圖示具體大小是多少,如有的人把一張512 x 512的圖檔當成ic-launcher,在高分辨率手機上沒有問題,但是在一些低分辨率手機上發現桌面上找不到自己應用的圖示,或者顯示名稱但看不到圖示,想找ic-launcher标準大小嗎?建立一個Android項目不就有了嗎?看系統生成的那些ic-launcher在各種drawable上的大小即可,這就是最标準的了,何需百度,出圖示的時候就讓美工按着那些圖示大小出就不會有問題了。

        又如,通知欄圖示要多大呢?如果大小不合适,則顯示通知的時候看到的圖示可能顯示不全或者其它問題,要想知道通知欄圖示多大合适,找Android系統設計的那些呀,路徑為:sdk\platforms\android-15\data\res,在這裡搜尋notification,然後看看相同名字的通知欄圖示在不同的drawable中的大小是多少,這樣你就知道你應該讓美工給你切多大的通知欄圖示了^_^

接下來了解本質的東西,下面的内容都是我拿真實手機測試出來的結果,是以應該比百度出來的那些更有真實性。

一般手機的分辨率對應的各參數為:

  • drawable-ldpi  檔案夾:             低密度螢幕:dpi = 120dp,scale = ??, 超級元老,不用管它,不會再有這種dpi的手機的啦!
  • drawable-mdpi 檔案夾:      中等密度屏 幕:dpi = 160dp,scale = 1.0,分辨率:320 x 480
  • drawable-hdpi  檔案夾:           高密度螢幕:dpi = 240dp,scale = 1.5,分辨率:480 x 854
  • drawable-xhdpi 檔案夾:      超高密度螢幕:dpi = 320dp,scale = 2.0,分辨率:720 x 1280
  • drawable-xxhdpi檔案夾:  超超高密度螢幕:dpi = 480dp,scale= 3.0,分辨率:1080 x 1920

        scale 為縮放系數,标準的dpi是160dpi,是以160dpi的scale為1.0,其它dpi的縮放系數都是與160相比算出來的,如320dpi,它除以160dpi結果為2,是以320dpi的scale為2.0

        好,有了這個scale之後呢建立圖檔就簡單了,怎麼個簡單法?先找出160dpi對應的大小就OK了。

        如,美工設計了一張很美的圖檔,而且是以720 x 1080的分辨率為基礎進行設計,假如寬高都為300像素,則這張圖放在720 x1280的手機上顯示肯定是完美的,如果放到其它分辨就有可能會被壓縮或者放大,那效果就會大打折扣,是以我們大家都知道要切多套圖檔放到不同的drawable目錄中,那問題來了,美工如果她不懂,她問你,其它分辨率怎麼切圖?

        怎麼切呢?我們就先算出160dpi對應的大小就行了,它切的圖是以720 x 1080的手機為基礎設計的,這個分辨率對應的是xhdpi,scale是2.0,是以160dpi對應的大小就是:300 / 2.0 = 150像素,那這樣的話4種drawable的圖檔怎麼切就有答案了:

  • 160dpi 的圖檔大小為150像素,那其它的就按scale去算就好了,如下:
  • drawable-hdpi:    150* 1.5 = 225
  • drawable-xhdpi:   150 *2.0 = 300
  • drawable-xxhdpi: 150 *3.0 = 450

就目前情況來說,切圖切4套就夠了。

        假如,有一張圖檔,你并不知道它是在哪個分辨率的基礎上進行設計的,那你就不知道這張圖檔應該放在哪個drawable檔案夾中,這種情況經常會遇到,比如我們學習Android時的那些圖檔,根本不知道是誰設計的,也不知道是在哪個分辨率的基礎上設計的,那你怎麼知道放在哪個drawable檔案夾中比較合适呢?一般人會選擇放在drawable-hdpi  檔案夾中,或許吧,多人這麼做肯定是這樣做一般沒什麼問題,但是,同一張圖檔,注:隻有一張圖檔哦,把它放到不同的drawable檔案夾中,然後在同一台手機上的顯示效果會不一樣哦,為什麼會這樣呢?嗯,夜已深,我先睡覺,有時間再來寫完它。。。