官术网_书友最值得收藏!

2.3 添加圖像資源

適配多種屏幕密度和尺寸是Android中最有趣的挑戰(zhàn)之一。當(dāng)顯示位圖圖像時(shí)尤其如此,其中有兩個(gè)互斥的問(wèn)題需要解決。

? 低分辨率圖像在拉伸到適合大屏幕或高分辨率屏幕時(shí),顯示得很模糊。

? 在小屏幕、低密度屏幕上顯示時(shí),高質(zhì)量圖像所消耗的內(nèi)存遠(yuǎn)遠(yuǎn)超過(guò)所需。

除屏幕尺寸外,不同屏幕密度的問(wèn)題主要通過(guò)使用密度無(wú)關(guān)像素(dp)來(lái)解決。

2.3.1 管理屏幕密度

dp是基于160dpidpi全稱是dots per inch,即對(duì)角線每英寸的像素點(diǎn)的個(gè)數(shù)。——譯者注屏幕的抽象測(cè)量單位。dp意味著無(wú)論屏幕密度如何,寬度為320dp的小部件總是2英寸1英寸約等于2.54厘米。——編者注寬。當(dāng)涉及屏幕的實(shí)際物理尺寸時(shí),屏幕密度可以使用各種布局類型、支持庫(kù)以及屬性(如weight和gravity)來(lái)管理。下面來(lái)看如何提供圖像,以適應(yīng)最廣泛的屏幕密度范圍。

Android系統(tǒng)使用以下限定符劃分屏幕密度:

? 低密度(ldpi)——120dpi

? 中密度(mdpi)——160dpi

? 高密度(hdpi)——240dpi

? 超高密度(xhdpi)——320dpi

? 超超高密度(xxhdpi)——480dpi

? 超超超高密度(xxxhdpi)——640dpi

在安裝應(yīng)用程序的過(guò)程中,每個(gè)設(shè)備只會(huì)下載符合其規(guī)格的圖像。這樣不僅可以節(jié)省舊設(shè)備上的內(nèi)存,而且可以為有能力的設(shè)備提供最豐富的視覺(jué)體驗(yàn)。

從開(kāi)發(fā)者的角度來(lái)看,似乎需要為給定項(xiàng)目中的所有圖像都生成6個(gè)版本。值得慶幸的是,情況通常并非如此。在大多數(shù)手持設(shè)備上,640dpi的圖像和320dpi的圖像之間的差別并不明顯。而且,考慮到我們的“三明治制作應(yīng)用程序”的大多數(shù)用戶只需要通過(guò)滑動(dòng)瀏覽菜單上的原料,而不需要仔細(xì)觀察圖像的質(zhì)量,我們可以僅為中、高和超高密度設(shè)備提供圖像。

在考慮高端設(shè)備的圖像質(zhì)量時(shí),一條經(jīng)驗(yàn)法則是將我們的圖像大小與該設(shè)備原生攝像頭生成的圖像大小進(jìn)行比較。為了提供更大的圖像以改善用戶體驗(yàn)而增加內(nèi)存需求很可能不值得。

在本示例中,我們將提供適合卡片視圖的圖像,該視圖將在縱向模式下占據(jù)大部分屏幕寬度。現(xiàn)在,需要找到一幅大約2000像素寬的圖像。在下面的示例中,該圖像被稱為sandwich.png,它的尺寸為1920像素×1080像素。你的圖像不需要和該圖像的尺寸保持一致,但稍后我們將看到,精心選擇的圖像比例是良好用戶界面實(shí)踐的重要組成部分。

一幅寬度為1920像素的圖像,在320dpi的超高密度設(shè)備上顯示的寬度為6英寸。至少現(xiàn)在我們可以假設(shè)應(yīng)用程序?qū)⑼ㄟ^(guò)移動(dòng)設(shè)備訪問(wèn),而不是通過(guò)計(jì)算機(jī)或電視訪問(wèn)。因此,即使在10英寸的高密度平板計(jì)算機(jī)上,6英寸也足以滿足需求。接下來(lái)看看如何為其他屏幕密度做準(zhǔn)備。

2.3.2 使用指定資源

通過(guò)在指定資源目錄中存放為特定屏幕密度配置的圖像,可以輕松地得到適合各種屏幕密度的位圖。在Android Studio中,可以通過(guò)以下步驟從項(xiàng)目資源管理器創(chuàng)建指定資源目錄。

(1)首先,在res文件夾下創(chuàng)建一個(gè)新的目錄,并將其命名為drawable-mdpi。

(2)接下來(lái),創(chuàng)建另外兩個(gè)名為drawable-hdpi和drawable-xhdpi的同級(jí)目錄。

(3)通過(guò)在項(xiàng)目資源管理器的drawable上下文菜單中選擇Show in Explorer(在資源管理器中顯示),直接打開(kāi)這些新文件夾。

(4)將sandwich.png圖像添加到drawable-xhdpi文件夾中。

(5)把這張圖像復(fù)制兩份,并按與原圖3∶4和1∶2比例分別縮放。

(6)將副本分別放在drawable-hdpi和drawable-mdpi目錄中。

現(xiàn)在,這些變體將體現(xiàn)在項(xiàng)目資源管理器中,如圖2-5所示。

圖2-5

現(xiàn)在我們可以放心,應(yīng)用程序只會(huì)根據(jù)設(shè)備的屏幕密度下載最適合、內(nèi)存效率最高的圖像資源。要查看圖像,請(qǐng)將以下圖像視圖添加到項(xiàng)目的activity_main.xml文件中。

   <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/sandwich" />

可以在模擬器或真機(jī)上的預(yù)覽屏幕查看輸出,如圖2-6所示。

圖2-6

這種方法的好處在于,一旦正確指定了圖像的變體,就可以簡(jiǎn)單地將其稱為@drawable/sandwich,并且可以忽略它當(dāng)前所在的真機(jī)或它存儲(chǔ)在哪個(gè)目錄中。

這使得我們可以自由地探索如何將圖像作為界面的一部分。

主站蜘蛛池模板: 萨嘎县| 祁东县| 鱼台县| 南皮县| 昂仁县| 博乐市| 庄河市| 广丰县| 邵阳县| 修水县| 和龙市| 嘉黎县| 屏山县| 高尔夫| 郎溪县| 无极县| 武清区| 建水县| 深州市| 文成县| 宾阳县| 永州市| 栾川县| 乌海市| 光山县| 仁怀市| 威远县| 新邵县| 宁化县| 莱芜市| 长治市| 吴堡县| 太原市| 稷山县| 迁西县| 武城县| 神木县| 安远县| 平遥县| 齐河县| 永泰县|