2012-05-02 65 views
10

下面的代碼定義我的位圖:將縮放的位圖繪製到畫布上?

Resources res = context.getResources(); 

    mBackground = BitmapFactory.decodeResource(res, 
      R.drawable.bg2); 

    //scale bitmap 
    int h = 800; // height in pixels 
    int w = 480; // width in pixels  
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order 

...而下面的代碼被用於執行/繪製(未縮放的位圖):

c.drawBitmap(mBackground, 0, 0, null); 

我的問題是,我怎麼可能將其設置爲繪製以「位圖縮放」形式返回的縮放位圖,而不是原始圖片?

回答

25

定義一個新的類成員變量: Bitmap mScaledBackground; 然後,新創建的縮放位圖分配給它: mScaledBackground = scaled; 然後,請致電您的繪製方法: c.drawBitmap(mScaledBackground, 0, 0, null);

請注意,這不是一個好主意以上面代碼片段的方式硬編碼屏幕大小。更好的方式是通過以下方式獲取您的設備的屏幕尺寸:

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

那將是可能會更好,不申報新位圖繪製您的原始背景的縮放方式的唯一目的。位圖會消耗大量寶貴資源,並且通常手機僅限於幾MB的位圖,您可以在應用程序不合格地失敗之前加載這些位圖。相反,你可以做這樣的事情:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1); 
Rect dest = new Rect(0,0,width-1, height-1); 
c.drawBitmap(mBackground, src, dest, null); 
+1

你的答案對我有效,但在參數中從寬度和高度減去1後,在顯示的位圖的右側和底部顯示一行(從背景中的另一個位圖),刪除-1工作正常。 – akshay7692

+1

我知道這是一個較舊的帖子。但對於Android 7.0+,在分屏模式下,您可能無法依賴完整的顯示寬度/高度。因此,對於使用此解決方案的任何人,您應該牢記這一點。 – MCLLC

+0

會以這種方式繪製位圖很慢嗎? – Amos

2

吸引你想要的縮放位圖保存在一個領域你縮放的位圖的地方(這裏稱爲mScaled)和撥打:

c.drawBitmap(mScaled,0,0,null); 

在抽籤方法(或者你現在所稱的地方)。