Android Drawable Resource學習(二)、BitmapDrawable和Bitmap

來源:互聯網
上載者:User
一、如何建立一個BitmapDrawable對象

Bitmap,代表一個位元影像映像,Android支援三種格式的位元影像映像:.png (preferred),.jpg (acceptable), .gif (discouraged)。

括弧裡的說明,代表這三種格式的圖片在Android中的支援情況,.png格式圖片優先,.jpg格式也可以,但是效果沒有.png好,.gif支援最差。

可以直接使用圖片的名稱作為資源ID,來直接引用一個位元影像圖片。也可以再XML檔案中建立一個資源別名的ID。

在構建應用的時候,Bitmap檔案可能會被appt工具壓縮自動最佳化為無損映像。例如,一個真彩色PNG,不需要超過256的顏色可以被轉換成一個8位PNG和調色盤。這將導致一個映像品質相同,但這需要更少的記憶體。所以要意識到,在drawable目錄中映像的二進位檔案在構建程式時可以改變。如果你打算讀一個映像作為位元組流並將它轉換成一個位元影像,把你的圖片放在在res /raw/檔案夾裡,在那裡他們不會被最佳化。

1、通過Bitmap File

一個bitmap檔案就是一個.png、.jpg,.gif格式的檔案。Android會對儲存在res/drawable/目錄下的這些檔案建立一個Drawable資源。

檔案位置:

       res/drawable/filename.png (.png,
.jpg
, or .gif)    檔案名稱即資源的ID。

編譯資源資料類型:
             指向BitmapDrawable類型的指標。
資源引用:

In Java: R.drawable.filename
In XML: @[package:]drawable/filename
樣本:
有這樣儲存的圖片 res/drawable/myimage.png,在layout xml檔案中將他顯示在視圖上。
<ImageView    android:layout_height="wrap_content"    android:layout_width="wrap_content"    android:src="@drawable/myimage" />

在java代碼中檢索出為一個Drawable對象。

            
        Resources res=getResources();        Drawable drawable = res.getDrawable(R.drawable.myimage);        //實際上這是一個BitmapDrawable對象        BitmapDrawable bitmapDrawable=(BitmapDrawable)drawable;        //可以在調用getBitmap方法,得到這個位元影像        Bitmap bitmap=bitmapDrawable.getBitmap();
參考:
  • 2D Graphics
  • BitmapDrawable

2、通過XML Bitmap

一個XML bitmap是一個在XML檔案中定義的指向一個bitmap檔案的資源。其效果是作為一個原始位元影像檔案的別名,並且可以指定一些額外的屬性。

注意:你可以在<item>節點中使用<bitmap>作為它的子節點。比如,當你定義一個state list或者layer list的時候,可以包括一個android:drawable屬性

Note: You can use a <bitmap> element as a child of an<item> element. Forexample, when creating astate list orlayer list,you can exclude the
android:drawableattribute from an<item> element and nest a<bitmap> inside it that defines the drawable item.

檔案位置:
res/drawable/filename.xml
filename作為資源的ID
編譯資源類型
指向BitmapDrawable類型的指標
資源引用
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
文法:
<?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: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。定義了XML的命名空間,必須是"http://schemas.android.com/apk/res/android"。如果<bitmap>是根項目,那麼他是必須的,如果是嵌套在<itme>裡面,那麼就不是必須的。
android:src
類型:Drawable resource。必需。 引用一個drawableresource.
android:antialias
類型:Boolean。是否開啟消除鋸齒。
android:dither
類型:Boolean。如果位元影像與螢幕的像素配置不同時,是否允許抖動.(例如:一個位元影像的像素設定是 ARGB 8888,但螢幕的設定是RGB 565)
android:filter
類型:Boolean。是否允許對位元影像進行濾波。對位元影像進行收縮或者延展使用濾波可以獲得平滑的外觀效果。
android:gravity
類型:關鍵字。定義位元影像的重力(gravity),如果位元影像小於其容器,使用重力指明在何處繪製

必需是下面的屬性,多個之間用  |  分隔

Value Description
top Put the object at the top of its container, not changing its size.
bottom Put the object at the bottom of its container, not changing its size.
left Put the object at the left edge of its container, not changing its size.
right Put the object at the right edge of its container, not changing its size.
center_vertical Place object in the vertical center of its container, not changing its size.
fill_vertical Grow the vertical size of the object if needed so it completely fills its container.
center_horizontal Place object in the horizontal center of its container, not changing its size.
fill_horizontal Grow the horizontal size of the object if needed so it completely fills its container.
center Place the object in the center of its container in both the vertical and horizontal axis, notchanging its size.
fill Grow the horizontal and vertical size of the object if needed so it completely fills itscontainer. This is the default.
clip_vertical Additional option that can be set to have the top and/or bottom edges of the child clipped toits container's bounds. The clip is based on the vertical gravity: a top gravity clips thebottom edge, a bottom gravity clips the top edge, and neither clips both
edges.
clip_horizontal Additional option that can be set to have the left and/or right edges of the child clipped toits container's bounds. The clip is based on the horizontal gravity: a left gravity clipsthe right edge, a right gravity clips the left edge, and neither clips
both edges.
android:tileMode
類型:Keyword
定義了tile模式。當tile模式被啟用,位元影像是重複的,並且gravity屬性將被忽略。

必須是下列之一常量值:

Value Description
disabled Do not tile the bitmap. This is the default value.
clamp Replicates the edge color if the shader draws outside of its original bounds
repeat Repeats the shader's image horizontally and vertically.
mirror Repeats the shader's image horizontally and vertically, alternating mirror images so thatadjacent images always seam.
樣本:
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@drawable/icon"    android:tileMode="repeat" />
參考:
  • BitmapDrawable
  • Creatingalias resources
二、BitmapDrawable的使用

一個BitmapDrawable就是封裝了一個位元影像。直接以檔案的方式,就是封裝了一個原始的位元影像。以Xml方式,可以對原始的位元影像進行一系列的處理,比如說消除鋸齒,展開,對齊等等。

要瞭解BitmapDrawable的使用,還需要明白Bitmap、BitmapFactory等類。Bitmap代表了一個原始的位元影像,並且可以對位元影像進行一系列的變換操作。BitmapFactory提供一系列的方法用於產生一個Bitmap對象。多用在Canvas中。

關於繪圖和位元影像變換以後再學習。BitmapDrawable的使用比較簡單,就是在其他的xml檔案中直接引用就可以了,不過要注意在xml中定義BitmapDrawable各個屬性使用和含義。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.