2011年2月11日 星期五

[Android] Canvas 貼圖

再寫程式或寫小遊戲的時候,使用canvas貼圖 這是一定會遇到的,
它的做法非常簡單

首先,先把選好壹張圖片放進 package底下的res/drawable
會看到drawable有三個,這三個的不同點在於show出來的解析度 或 大小會有些微不同,
所以這要依照需求的不同來放置,接著,看一小段簡單的例子


public class ViewTest extends View
{
Paint p=new Paint();
Bitmap bmp;
public ViewTest(Context context)
{
super(context);
bmp = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
}
@Override
public void onDraw(Canvas c)
{
c.drawBitmap(bmp,10,10,p);
}
}


首先第一個步驟,先宣到一個Bitmap變數來存放圖片。


Bitmap bmp;
bmp = BitmapFactory.decodeResource(getResources(),R.drawable.icon)


接著,在onDraw(Canvas c)裡,用Canvas把 Bitmap圖片物件畫出來,

c.drawBitmap(bmp,10,10,p);


這邊使用的drawBitmap() method 第2個參數是X座標,第3個是Y座標
而第4個參數paint,如果沒有特別用到它,也是可以給 null

這樣子canvas 貼圖就OK了。

9 則留言:

  1. 我想請教一下,我這樣設置是沒有出現圖案的
    我的做法是在onCreate時
    new一個Canvas
    然後呼叫onDraw(Canvas)
    這樣是不是有哪裡錯誤呢,謝謝你

    回覆刪除
  2. 您的程式是寫錯了唷!

    在 Activity的 onCreat 裡面,
    我們是不需要自己去呼叫 onDraw 的,
    這個method 是 系統自己會呼叫,

    我們只需要在 onCreat 裡面寫,

    MyView myview = new MyView(this);
    setContentView(myview);

    這樣就行了,不用在去呼叫 onDraw!!

    希望這個解釋 您聽得懂 ^_^

    回覆刪除
  3. 我懂了,謝謝您!

    回覆刪除
  4. 請教一下,
    如果前面因為自己的需求已經畫了一個.xml檔,
    然後用setContentView去接它了,
    那麼這時候再去接myview應該會蓋掉對吧0.0?
    有沒有辦法令兩者共存而不衝突呢?
    先謝謝啦~

    回覆刪除
  5. 我想請問一下這一段應該放在哪裡?
    Bitmap bmp;
    bmp = BitmapFactory.decodeResource(getResources(),R.drawable.bag);

    回覆刪除
  6. 作者已經移除這則留言。

    回覆刪除
  7. 至於,
    Bitmap bmp; 這個 只是宣告一個 圖片的變數 宣告在 viewclass 底下就好。

    bmp = BitmapFactory.decodeResource(getResources(),R.drawable.icon)

    這個是讓程式 去讀取 package 底下的圖片物件, 可以寫在 view contruter 裡面, 也可以寫在 view 底下的 ondraw 裡面。

    只要 是寫在 view 底下! 有被執行到!
    不管寫在哪邊 大致上都是OK的!

    回覆刪除
  8. 抱歉! 這幾天 沒上來部落格^^" 所以沒注意到 回文!

    關於 xml 那個問題, 我有點聽不太明白,

    你的問題是說: 如果已經 制訂好一個xml界面,而且 還有一個 自訂一的view 嗎?!

    這邊我還有一個疑問是 XML 跟 你的自定義view,兩者 是不是 要讓 自定義view 鑲嵌在 XML 裡面嗎? 還是 不用鑲嵌 用重疊的?

    如果是要鑲嵌在XML面的話,這個可以辦到
    <.view class="pakageName.ViewClassName"
    android:layout_width="fillparent"
    android:layout_height="fillparent"/.> (把view前面的.消掉 , 還有最後面的.消掉)
    這樣子可以鑲嵌進XML!

    不過要讓他們重疊 同時存在 這個恐怕 有困難! 我想不到方法!

    回覆刪除
  9. 請問一下
    canvas如何調整用進來的圖片大小

    回覆刪除