要把一個 Bitmap 畫到 View 上,必須用到的類有 android.graphics.Canvas, 和 android.graphics.Bitmap 。方法很簡單,在 View 裏面,重載 onDraw(Canvas canvas) 方法,而後用 canvas.drawBitmap() 方法,將其畫在屏幕上。 java
public class MyView extends View { private Bitmap mBitmap; public MyView(Context context) { super(context); initialize(); } private void initialize() { Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap(); mBitmap = bmp; } @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); //固然,若是界面上還有其餘元素須要繪製,只須要將這句話寫上就好了。 canvas.drawBitmap(mBitmap, 0, 0, null); } }結果:
原圖: android
雖然這僅僅只是第一步,可是很鼓舞人心呢,呵呵。 canvas
上面是直接將原圖畫在屏幕上,沒有任何處理,由於圖片比屏幕大,因此超出的部分看不到。咱們試着將圖片拉伸以填滿整個屏幕。 ide
public class MyView extends View { private Bitmap mBitmap; private Matrix mMatrix = new Matrix(); private static int mScreenWidth; private static int mScreenHeight; public MyView(Context context) { super(context); initialize(); } private void initialize() { DisplayMetrics dm = getResources().getDisplayMetrics(); mScreenWidth = dm.widthPixels; mScreenHeight = dm.heightPixels; Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap(); mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true); } @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); //固然,若是界面上還有其餘元素須要繪製,只須要將這句話寫上就好了。 canvas.drawBitmap(mBitmap, 0, 0, null); } }
顯示結果: spa
下面一篇將介紹對Bitmap的一些操做。 code
Android畫圖之Bitmap(一) 介紹了簡單的把 Bitmap 畫到屏幕上,以及縮放 Bitmap 以鋪滿屏幕。對 Bitmap 的操做還有不少。好比截取 Bitmap 的部分區域,能夠使用 blog
mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120);
縮放一個 Bitmap ,前面一篇已經涉及到了,能夠用 Bitmap.createScaledBitmap() 方 法根據給定的 Bitmap 建立 一個新的,縮放後的 Bitmap 。 圖片
Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);其中 mScreenWidth 和 mScreenHeight 是屏幕的寬度和高度,這裏就將 bmp 拉伸到整個屏幕。
每次 createBitmap ,都會分配新的內存,帶來資源的 消耗,因此用 Bitmap 的 createBitmap 雖然簡單方便,可是不是最優方 法。介紹一個比較好點的方法,不用建立新的 Bitmap ,用 Canvas 在畫的時候直接縮放或者剪切。 內存
canvas.drawBitmap(mBitmap, null, new Rect(0, 0, 200, 200), null);這裏的 Rect 對象表示一個矩形區域,從 (0,0) 到 (200,200) 之間的矩形區域。這段代碼將把 mBitmap 縮放並繪製到屏幕上的 (0,0) 到 (200,200) 之間的區域。
這個方法還有第二個參數我給的是 null ,其實這個參數也是個 Rect 對象,表示源 Rect 。把圖片的某個區域拿出來畫到屏幕的指定區域。
canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null);這裏將 mBitmap 的 (100,100) 到 (300,300) 區域拿出來,自動縮放並畫到屏幕的 (100,100) 到 (200,200) 區域。
對於 Bitmap 的處理,上面介紹的 是最簡單的兩種,平移和縮放。而要是須要更復雜的處理,好比旋轉和傾斜,就得使用 Matrix 了。下面幾篇將介紹 Matrix 在畫圖中的使用。