2011-06-15 54 views
1

在我的自定義視圖中,我必須在用戶選擇標誌時在基礎位圖上繪製。假設我有一個基地位圖和用戶打開小鬍子國旗上。由於此自定義視圖必須具有可伸縮性,因此我想使用相對座標(範圍[0,1])而不是位圖寬度和高度。以下不起作用在位圖上繪製圖元

Bitmap orig, face; 

public void onDraw(Canvas c) { 
    c.drawBitmap(face); 
} 

public void onMustacheFlag() { 
    face = Bitmap.create(orig); 
    Canvas c = new Canvas(face); 
    c.save(); 
    c.scale(1f/face.getWidth(), 1f/face.getHeight()); 
    // Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f] 
    c.restore(); 
} 

另外,該自定義視圖力高度是等於寬度(這是一個正方形形狀因子)

回答

0

Canvas.scale(float, float)的參數作爲係數x e和y在座標繪製例程。傳遞1f/width意味着將範圍(0,1)中假定的值乘以小於1的數字,因此所有繪圖例程的結果最終在左上角,並且可能不可見。相反,如果我通過widthheight,代碼按預期工作,因爲範圍(0,1)映射到(0,寬度):

public void onMustacheFlag() { 
    face = Bitmap.create(orig); 
    Canvas c = new Canvas(face); 
    c.save(); 
    c.scale(face.getWidth(), face.getHeight()); // instead of 1/width 
    // Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f] 
    c.restore(); 
}