Photo by Dan Smedley on Unsplash
drawable 資源是 Android 開發過程中,最常被使用的資源。在 Android筆記(3):專案建立與IDE操作介面文章中說明建立專案時所建立的資源目錄,資源目錄 res 下有 drawable 和 mipmap 兩個目錄都是放置圖片的,其差別在於 drawable 目錄放的是 .png 、.jpg、.gif、.9.png 的圖片,mipmap 是放置 icon 的目錄。除了圖片檔外,還可以使用 XML 檔 定義圖片內容,直接由系統編譯成 drawable 子類別物件,就可以讓需要用到圖片的元件使用。
要使用資源中 drawable 下的圖片有2種方法,一種是在 Layout 佈局檔下直接編輯 XML 檔,使用與圖片有關的元件,如 ImageView、ImageButton 等元件,再使用 src 屬性關連到 drawable 的圖片即可。另一種方法是使用 java 程式存取中 drawable 中的圖片。
[在 drawable 新增圖片]
要如何將圖片檔案放置到 drawable 目錄中呢?很簡單,就跟在 Windows 作業系統中的檔案複製功能一樣,以下操作的步驟:(1) 先選定檔案按右鍵選擇「複製」,或直接對檔案按下 Ctrl + C 。
(2) 開啟 Android Studio,在專案的目錄下找到 drawable 按右鍵選擇「Paste」,如下圖:
(3) 出現選擇放置的目錄,通常放置在 drawable 目錄內,如果放到 drawable-v24 目錄內,會導致 7.0 版以下的手機/平板找不到圖片。
(4) 出現以下畫面,可修改檔案名稱,或直接按下 OK 就完成了。
drawable 存放的檔名,不能以數字開頭,且必須是小寫的英文字[a-z]和數字[0-9]及區隔副檔名的[.],否則編譯時會產生錯誤。
[在Layout佈局檔中使用圖片資源]
根據上面步驟,已經將 Photo15.jpg 複製進 drawable,開啟 res\layout 目錄下的 activity_main.xml,增加一個 ImageView 元件,設定 src 屬性為 drawable 內的資源名稱,就設定好圖片的顯示,如下圖紅框處:[在 java 中使用圖片資源]
在 java代碼中,可以使用 setImageBitmap 指定 drawable 給一個圖片類元件,如要取得元件資源,可以使用 Resource.getDrawable(R.mipmap.xxx) 來取得。開啟 java 目錄下的 MainActivity.java 修改如下:
package com.example.app; import androidx.appcompat.app.AppCompatActivity; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = new ImageView(this) ; //建立ImageView物件 // 將圖片設定給ImageView物件 iv.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.photo15)); this.setContentView(iv); //將ImageView設定給目前的view } }
MainActivity.java 檔案內主要修改三行,如以下紅色框處:
上述的兩個方法,結果畫面如下:
[mipmap]
一樣是放置圖片的目錄,為何要分成 drawable 和 mipmap?,Google 官方的解釋是效能優化,mipmap 佔用的記憶體較小,適用等比例縮放不會失真的圖檔,若有考慮效能問題,一般會建議使用 mipmap。新增 mipmap 圖示檔的方法與上述的 drawable 一樣,將圖示複製到對應的目錄即可。Android Studio 建立專案時,會再 mipmap 目錄下,建立兩個目錄 ic_launcher 及 ic_launcher_round ,內有預設不同解析度的小綠人圖示。從 Android 7.1.1 開始系統中的應用圖示改為圓形圖示,為了讓其他版本的系統也能正常使用,mipmap 子目錄中會自動產生圓形 ic_launcher_round 與方形 ic_launcher 兩種圖示。如下圖目錄結構:
在 Android Studio 看到的目錄結構實際上與作業系統下的目錄存放方式不同,其目錄存放空間會建立:mipmap-xxxhdpi(超超超高解析度)、mipmap-xxhdpi(超超高解析度)、mipmap-xhdpi(超高解析度)、mipmap-hdpi(高解析度)和mipmap-mdpi(中解析度)等 5 個目錄,以及 mipmap-anydpi-v26 目錄,分別產生與目錄解析度對應的 ic_launcher 或 ic_launcher_round 圖檔。
不同目錄存放的解析度如下:
來源:Developers
以下整理幾個免費的圖片或圖示的網站作為參考:
[參考資料]
- Developer : drawable resource
- Developer : ImageView
- Developer : 支持不同的像素密度
張貼留言