2013-10-03 70 views
0

我有自定義視圖,其中包含許多矩形和橢圓和.....我可以旋轉我的整個畫布(矩形和橢圓和....)通過使用canvas.rotate (度,cneterX,centerY)如何分別旋轉帆布的不同部分在Android

但在我的視圖的底部,我想有一個菜單,當我使用canvas.rotate()不旋轉的東西。這意味着我想旋轉這些矩形和橢圓形,但不想旋轉我的菜單,將使用相同的畫布創建。

@Override 
    protected void onDraw(Canvas canvas) { 

    float ringWidth = textHeight + 4; 
    int height = getMeasuredHeight(); 
    int width =getMeasuredWidth(); 

    int px = width; 
    int py = height/2; 
    Point center = new Point(px,py); 

    int radius = Math.max(px, py)-2; 

    int UpperSide = center.y; 

    RectF boundingBox = new RectF(center.x - radius, center.y - radius, center.x + radius, center.y + radius); 

    RectF innerBoundingBox = new RectF(center.x - radius , center.y - radius , center.x + radius, center.y + radius); 


    RectF GroundSectionBox = new RectF(center.x - radius,UpperSide ,center.x + radius,center.y + radius); 

    RectF RightPanel = new RectF(center.x + width -(width/4), center.y - (radius/2)+10, center.x+radius- ringWidth, center.y + (radius/2)-10); 
    RectF LeftPanel = new RectF(center.x - radius + ringWidth ,center.y - (radius/2)+10, center.x - width + (width/4), center.y + (radius/2)-10); 

    RectF RightBlack = new RectF(center.x + width -(width/4),center.y-(radius/10),center.x+radius- ringWidth,center.y + (radius/10)); 
    RectF leftBlack = new RectF(center.x - radius + ringWidth ,center.y - (radius/10), center.x - width + (width/4), center.y + (radius/10)); 

     . 
     . 
    canvas.drawRect(innerBoundingBox, groundPaint); 

    canvas.drawPath(skyPath, skyPaint);  
    canvas.drawRect(GroundSectionBox, skyPaint); 

    canvas.drawPath(skyPath, markerPaint); 

    canvas.drawRect(RightBlack, sideBlack); 
    canvas.drawRect(leftBlack, sideBlack); 


    canvas.drawRect(RightPanel, RightPanelup); 
    canvas.drawRect(LeftPanel, LeftPanelUp); 
     . 
     . 
     } 

回答

0

您可以使用Canvas上的保存和恢復方法在轉換中繪製東西,然後恢復到原始狀態。這裏有一個例子:

protected void onDraw(Canvas canvas) 
{ 
    canvas.save(); // Canvas is in original state. Save it before anything 

    // Perform any transformations you want here (like rotate) 
    // Draw while your transformations are in place (like ovals) 

    canvas.restore(); // Canvas state returned to what it was when you called save 

    // Draw things that need to be drawn without any transformations 
} 

希望這有助於:)