Drawable子類之—— BitmapDrawable (可控制對(duì)齊平鋪的圖像)

本文出自 “阿敏其人” 簡(jiǎn)書博客,轉(zhuǎn)載或引用請(qǐng)注明出處。

1、BitmapDrawable

Bitmap搭儒,代表一個(gè)位圖圖像穷当,Android支持三種格式的位圖圖像:.png (preferred),.jpg (acceptable)淹禾, .gif (discouraged)馁菜。
括號(hào)里的說(shuō)明,代表這三種格式的圖片在Android中的支持情況铃岔,.png格式圖片優(yōu)先汪疮,.jpg格式也可以,但是效果沒有.png好毁习,.gif支持最差智嚷。

在構(gòu)建應(yīng)用的時(shí)候,Bitmap文件可能會(huì)被appt工具壓縮自動(dòng)優(yōu)化為無(wú)損圖像纺且。例如,一個(gè)真彩色PNG盏道,不需要超過256的顏色可以被轉(zhuǎn)換成一個(gè)8位PNG和調(diào)色板。這將導(dǎo)致一個(gè)圖像質(zhì)量相同载碌,但這需要更少的內(nèi)存猜嘱。所以要意識(shí)到,在drawable目錄中圖像的二進(jìn)制文件在構(gòu)建程序時(shí)可以改變嫁艇。如果你打算讀一個(gè)圖像作為字節(jié)流并將它轉(zhuǎn)換成一個(gè)位圖朗伶,把你的圖片放在在res /raw/文件夾里,在那里他們不會(huì)被優(yōu)化步咪。

可以直接使用圖片的名稱作為資源ID论皆,來(lái)直接引用一個(gè)位圖圖片。也可以再XML文件中創(chuàng)建一個(gè)資源別名的ID歧斟。

明明圖片拉進(jìn)去對(duì)應(yīng)的文件之后我們就直接設(shè)置為背景纯丸,那么谷歌還要弄一個(gè)BitmapDrawable干嘛,簡(jiǎn)單說(shuō)就是你直接設(shè)背景能控制背景怎么對(duì)齊嗎静袖,能控制背景如何平鋪嗎,不能俊扭。

所以最看得見的好處就是:

  • BitmapDrawable可以設(shè)定背景的對(duì)齊方式
  • BitmapDrawable可以設(shè)定背景的對(duì)齊方式队橙。

有圖有真相:

對(duì)其和平鋪.gif

1.1、最簡(jiǎn)單的BitmapDrawable的使用方法:

在程序的drawable文件面新建一個(gè)文件:
內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="repeat"
    >
</bitmap>

然后在activity的布局文件隨便寫一個(gè)TextView萨惑,寬高比我們的src對(duì)應(yīng)的圖片大一些捐康,然后把剛剛的 根元素為bitmap 的xml文件設(shè)為該TextView的背景

Paste_Image.png

然后運(yùn)行程序庸蔼,即可看到效果解总。

Paste_Image.png

1.2 BitmapDrawable 用法簡(jiǎn)述

BitmapDrawable的xml需要什么?

<?xml version="1.0" encoding="utf-8"?>

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="repeat"
    >
</bitmap>

  • 開頭
    <?xml version="1.0" encoding="utf-8"?>是xml必須的姐仅,不必說(shuō)
  • 根元素
    BitmapDrawable對(duì)應(yīng)的根元素就是 bitmap花枫,也沒什么可說(shuō)
  • 節(jié)點(diǎn)
    src 節(jié)點(diǎn)是必不可少的刻盐。

也就是說(shuō):在一個(gè)根元素是bitmap帶src節(jié)點(diǎn)的xml文件。
其他的節(jié)點(diǎn)就是修飾劳翰,比如我們還用到的 tileMode

BitmapDrawable可設(shè)置的節(jié)點(diǎn)

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:mipmap=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] >

</bitmap>
  • xmlns:android
    類型:String敦锌。
    定義了命名空間,必須是"http://schemas.android.com/apk/res/android"佳簸。
    如果<bitmap>是根元素乙墙,那么他是必須的,
    如果是嵌套在<itme>里面生均,那么就不是必須的听想。比如我們上面就不用。

  • android:src 資源id
    沒什么可說(shuō)马胧,圖片資源id

  • android:antialias 抗鋸齒
    是否開啟抗鋸齒汉买,圖片會(huì)更加平滑,會(huì)降低清楚度漓雅,但是基本忽略录别,所以,開

  • android:dither 抖動(dòng)效果
    是否開啟抖動(dòng)邻吞,開组题。
    抖動(dòng)的作用:讓高質(zhì)量的圖片的比較低質(zhì)量的屏幕上不失真,得到比較好的顯示效果抱冷。
    比如圖片的色彩模式是 ARGB8888崔列,但是手機(jī)設(shè)備的支持RGB555的色彩模式,那么開啟這么就可以有效減少失真現(xiàn)象旺遮。
    (Android中我們創(chuàng)建的Bitmap一般會(huì)選擇ARGB888模式赵讯,ARGB每個(gè)通道各占8位,8位1個(gè)字節(jié)耿眉,一個(gè)像素4個(gè)字節(jié)边翼,一個(gè)像素的位數(shù)總和越高,圖片越逼真)

  • android:filter 過濾效果
    開鸣剪。在圖片圖片被拉伸或者壓縮的時(shí)候開啟過濾效果可以顯示更加好的效果组底。

  • android:gravity 圖片的對(duì)齊效果

  • android:mipmap 紋理映射,as里面就用了這個(gè)了筐骇。先默認(rèn)為false(待考究)

gravity 選項(xiàng)的可選項(xiàng)

可選項(xiàng) 含義
top 保持原有大小债鸡,圖片至于容器的頂部
bottom 保持原有大小,圖片至于容器的底部
left 保持原有大小铛纬,圖片至于容器的左部
right 保持原有大小厌均,圖片至于容器的右部
center_vertical 保持原有大小,圖片垂直居中
fill_vertical 圖片垂直方向填充容器
center_horizontal 保持原有大小告唆,圖片水平居中
fill_horizontal 圖片水平方向填充容器
center 保持原有大小棺弊,圖片同時(shí)水平和垂直居中
fill 默認(rèn)值晶密,同時(shí)水平和垂直拉伸
clip_vertical 附加項(xiàng),表示水平方向的裁剪
clip_horizontal 附加項(xiàng)镊屎,表示水平方向的裁剪

需要說(shuō)明的是惹挟,這些對(duì)其方式可以利用 | 符號(hào)同時(shí)使用,比如
android:gravity="top|left"

  • android:tileMode 平鋪模式

**當(dāng)開啟 tileMode 之后 缝驳,gravity 屬性會(huì)被忽略 **

tileMode 選項(xiàng)的可選項(xiàng)

可選項(xiàng) 含義
disabled ?關(guān)閉平鋪模式
clamp 大小不變连锯,像素在四周擴(kuò)散
repeat 常見的水平和垂直方向的平鋪
mirror 水平和垂直方向的鏡面投影

全部節(jié)點(diǎn)介紹完了。

總結(jié)用狱,節(jié)點(diǎn)很多运怖,最需要的關(guān)心的(最能看到區(qū)別的)就是gravity和tileMode。

1.3 demo示例

這里貼上代碼夏伊,分別看一下的2個(gè)gravity的對(duì)其效果和4中tileMode的效果:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="原樣"/>



            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="原樣"
                android:background="@mipmap/demo_pic"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="直接src調(diào)用摇展,直接調(diào)用圖片"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="直接src調(diào)用,直接調(diào)用圖片"
                android:background="@mipmap/demo_pic"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用drawable下面的bitmap文件"/>
            <!--默認(rèn)是作為背景是整體拉伸的-->
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用drawable下面的bitmap文件"
                android:background="@drawable/bitmapdrawable_simple"
                android:layout_marginBottom="10dp"

                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="下面舉兩個(gè)例子說(shuō)明 gravity節(jié)點(diǎn)"
                android:textSize="30sp"
                />

            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"

                android:text="下面舉兩個(gè)例子說(shuō)明 gravity節(jié)點(diǎn)"
                android:textSize="30sp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 gravity top"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 gravity top"
                android:background="@drawable/bitmapdraw_gravity_top"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 gravity left"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 gravity left"
                android:background="@drawable/bitmapdraw_gravity_left"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="下面說(shuō)的都是tileMode"
                android:layout_marginBottom="10dp"
                android:textSize="30sp"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 tileMode disabled"/>
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 tileMode disabled"
                android:background="@drawable/bitmapdraw_tilemode_disabled"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 tileMode clamp"/>
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 tileMode clamp"
                android:background="@drawable/bitmapdraw_tilemode_clamp"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 tileMode report"/>
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 tileMode report"
                android:background="@drawable/bitmapdraw_tilemode_report"
                android:layout_marginBottom="10dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="調(diào)用bitmap文件 tileMode mirror"/>
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:text="調(diào)用bitmap文件 tileMode mirror"
                android:background="@drawable/bitmapdraw_tilemode_mirror"
                android:layout_marginBottom="10dp"

                />

        </LinearLayout>

    </ScrollView>

</LinearLayout>

附上xml文件

.
.
bitmapdrawable_simple.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
這是 bitmapdrawable 最簡(jiǎn)單的用法

根元素 名稱必須是 bitmap
src 節(jié)點(diǎn)必不可少

也就是說(shuō)最簡(jiǎn)答就是: 根元素為bitmap下戴一個(gè)有效的src節(jié)點(diǎn)

-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic">
</bitmap>

.
.

bitmapdraw_gravity_left.xml

<?xml version="1.0" encoding="utf-8"?>

<!--android:gravity="left"-->
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="left"
    android:src="@mipmap/demo_pic"></bitmap>

.
.

bitmapdraw_gravity_top.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:gravity="top"
    >
</bitmap>

.
.
bitmapdraw_tilemode_clamp.xml

<?xml version="1.0" encoding="utf-8"?>

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="clamp"
    >
</bitmap>

.
.
bitmapdraw_tilemode_disabled.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="disabled"
    >
</bitmap>

.
.
bitmapdraw_tilemode_mirror.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="mirror"
    >
</bitmap>

.
.
bitmapdraw_tilemode_report.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@mipmap/demo_pic"
    android:tileMode="repeat"
    >
</bitmap>
對(duì)其和平鋪.gif
Paste_Image.png
Paste_Image.png

了解更多的Drawable分類 Drawable圖像資源抽象類
本篇完溺忧。


相關(guān)參考:
《android開發(fā)藝術(shù)探索》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咏连,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲁森,更是在濱河造成了極大的恐慌祟滴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歌溉,死亡現(xiàn)場(chǎng)離奇詭異垄懂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痛垛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門草慧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匙头,你說(shuō)我怎么就攤上這事漫谷。” “怎么了蹂析?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵抖剿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我识窿,道長(zhǎng),這世上最難降的妖魔是什么脑融? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任喻频,我火速辦了婚禮,結(jié)果婚禮上肘迎,老公的妹妹穿的比我還像新娘甥温。我一直安慰自己锻煌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布姻蚓。 她就那樣靜靜地躺著宋梧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狰挡。 梳的紋絲不亂的頭發(fā)上捂龄,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音加叁,去河邊找鬼倦沧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛它匕,可吹牛的內(nèi)容都是我干的展融。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豫柬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼告希!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起烧给,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤燕偶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后创夜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杭跪,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年驰吓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涧尿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檬贰,死狀恐怖姑廉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翁涤,我是刑警寧澤桥言,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站葵礼,受9級(jí)特大地震影響号阿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸳粉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一扔涧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦枯夜、人聲如沸弯汰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咏闪。三九已至,卻和暖如春摔吏,著一層夾襖步出監(jiān)牢的瞬間鸽嫂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工舔腾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溪胶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓稳诚,卻偏偏與公主長(zhǎng)得像哗脖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扳还,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容