2012-02-04 53 views
3

我有一個觀點,派生類在那裏我畫一個790x500(是的,這是奇怪,但它必須保持這樣)位圖直接在畫布上的onDraw。這看起來不錯我的Nexus S,但是當我在設備上運行我的應用程序有一個小屏幕(如野火)我只看到了位圖的左上部分。我在這裏錯過了什麼?如何在Android中縮放View.Canvas上的位圖?

這是一個類似遊戲的應用,在那裏我畫了一些關於某些座標位圖。我真的不想爲LDPI,MDPI和HDPI設置不同的像素設置(我有一個很好的理由)。

問:如何正確縮放任何屏幕分辨率的位圖? (居中游戲畫面,供屏幕可能是一種選擇,但不是必須的。)例如,當我繪製320×240屏幕上的800×600的圖像,圖像被自動地拉伸並當我輸出的像素在100×100,它成爲40×40。

回答

6

有所述drawbitmap()方法的許多形式。選擇一個可以指定源矩形和目標矩形的區域。源矩形將是您的位圖的大小,目標矩形將被縮放以適應設備顯示。 Android會在繪製位圖時縮放位圖。

Rect rs = new Rect(); 
Rect rd = new Rect(); 
rs.left = rs.top = 0; 
rs.right = 789; 
rs.bottom = 499; 

<calculate destination rectangle from device size> 

canvas.drawBitmap(myBitmap, rs, rd, null); 

您也可以縮放和平移(移動)整個畫布

canvas.scale(float scaleX, float scaleY); 
canvas.translate(float dx, float dy); 
+0

如果我想擴展所有位圖和其他繪圖操作? – l33t 2012-02-04 23:04:39

0

Canvas.scale()的伎倆。