Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android畫圖學習總結(二)——Bitmap

Android畫圖學習總結(二)——Bitmap

編輯:Android開發實例

通過前一篇的學習,對Android 畫圖核心部分有了一定的了解,後面篇幅,我們將詳細介紹Android中的各種畫圖對象的使用,首先介紹我們最常用的Bitmap(位圖)。位圖是我們開發中最常用的資源,畢竟一個漂亮的界面對用戶是最有吸引力的。按照對位圖的操作,分為以下幾個功能分別介紹:

  1. 從資源中獲取位圖
  2. 獲取位圖的信息
  3. 顯示位圖
  4. 位圖縮放
  5. 位圖旋轉

1. 從資源中獲取位圖

在前一篇幅介紹了:先獲取Resource,然後可以通過資源ID獲取Drawable,也可以通過資源ID獲取資源文件的數據流。使用第一種方法比較容易,下面詳細說明第二種方法。通過Resource的函數:InputStream  openRawResource(int id)獲取得到資源文件的數據流後,也可以通過2種方法來獲取Bitmap,如下:

使用BitmapDrawable

(A Drawable that wraps a bitmap and can be tiled, stretched, or aligned.)

  1. 使用BitmapDrawable (InputStream is)構造一個BitmapDrawable;
  2. 使用BitmapDrawable類的getBitmap()獲取得到位圖;

BitmapDrawable也提供了顯示位圖等操作

使用BitmapFactory

(Creates Bitmap objects from various sources, including files, streams, and byte-arrays.)

  1. 使用BitmapFactory類decodeStream(InputStream is)解碼位圖資源,獲取位圖

BitmapFactory的所有函數都是static,這個輔助類可以通過資源ID、路徑、文件、數據流等方式來獲取位圖。

以上方法在編程的時候可以自由選擇,在Android SDK中說明可以支持的圖片格式如下:png (preferred), jpg (acceptable), gif (discouraged),雖然bmp格式沒有明確說明,但是在Android SDK Support Media Format中是明確說明了。

2. 獲取位圖的信息

要獲取位圖信息,比如位圖大小、是否包含透明度、顏色格式等,獲取得到Bitmap就迎刃而解了,這些信息在Bitmap的函數中可以輕松獲取到。Android SDK中對Bitmap有詳細說明,閱讀起來也比較容易,不在此詳細說明,這裡只是輔助說明以下2點:

  • 在Bitmap中對RGB顏色格式使用Bitmap.Config定義,僅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如說RGB_555,在開發中可能需要注意這個小問題;
  • Bitmap還提供了compress()接口來壓縮圖片,不過AndroidSAK只支持PNG、JPG格式的壓縮;其他格式的需要Android開發人員自己補充了。

3. 顯示位圖

顯示位圖需要使用核心類Canvas,可以直接通過Canvas類的drawBirmap()顯示位圖,或者借助於BitmapDrawable來將Bitmap繪制到Canvas。具體如何顯示位圖不是主要的問題,主要問題是如何獲取Canvas,參考Snake中的方法,做了個簡單的例子testView,提供給大家下載。

testView例子介紹:其包含2個類testActivity,testView;testActivity繼承與Activity,testView繼承與View。這個例子就是將testView直接作為testActivity的窗口,這樣我們就可以直接在testView畫圖了。具體如何實現的,請大家參考testActivity的onCreate()中的代碼,以及layout\main.xml中的設置。在testView的onDraw()直接畫圖,結果在例子程序運行後就可以直接在界面上顯示了。

4. 位圖縮放

位圖的縮放,在Android SDK中提供了2種方法:

  • 將一個位圖按照需求重畫一遍,畫後的位圖就是我們需要的了,與位圖的顯示幾乎一樣:
    drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
  • 在原有位圖的基礎上,縮放原位圖,創建一個新的位圖:
    createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

第2種方法一看就明白,對於第一種方法,舉個簡單的例子來說明:
int w = 320,h = 240;
String mstrTitle = “感受Android帶給我們的新體驗”;
Bitmap mbmpTest = Bitmap.createBitmap(w,h, Config.ARGB_8888);
Canvas canvasTemp = new Canvas(mbmpTest);
canvasTemp.drawColor(Color.WHITE);
Paint p = new Paint();
String familyName = “宋體”;
Typeface font = Typeface.create(familyName,Typeface.BOLD);
p.setColor(Color.RED);
p.setTypeface(font);
p.setTextSize(22);
canvasTemp.drawText(mstrTitle,0,100,p);
顯示位圖mbmpTest,就會發現一張320×240、白色背景、紅色“宋體”文字的圖片,如下:

這個例子沒有位圖縮放的任何操作?的確,但是這是我在想如何寫個簡單的位圖縮放的小程序時,最先想到的。看完這個例子,我想你就應該明白如何實現位圖的縮放了。不要小瞧了這個例子,雖然與位圖縮放關系不大,但是卻可以讓你理解位圖縮放的本質:將原始位圖按照需求顯示出來,就創造了一張新的位圖。

5. 位圖旋轉

位圖的旋轉,離不開Matrix。Matrix在線性代數中都學習過,Android SDK提供了Matrix類,可以通過各種接口來設置矩陣。結合上面的例子程序,將位圖縮放例子程序在顯示位圖的時候前,增加位圖旋轉功能,修改代碼如下:
Matrix matrix = new Matrix();
//matrix.postScale(0.5f, 0.5f);
matrix.setRotate(90,120,130);
canvas.drawBitmap(mbmpTest, matrix, mPaint);
旋轉後的位圖顯示如下:

除了這種方法之外,我們也可以在使用Bitmap提供的函數如下:
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter),在原有位圖旋轉的基礎上,創建新位圖。

總結說明

對位圖的操作,結合Android SDK中的類,詳細的介紹完了。最後還需要強調的是:這篇文章只是對Android SDK中代碼閱讀分析,它代替不了你閱讀Android SDK,深入的學習還是要仔細的閱讀Android SDK。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved