如何在android中分别旋转画布的不同部分

如何在android中分别旋转画布的不同部分,android,canvas,view,rotation,Android,Canvas,View,Rotation,我有一个自定义视图,它包含许多矩形和椭圆形,还有。。。。。我可以使用canvas.rotate(度数、中心距、中心距)旋转整个画布(矩形、椭圆形和…) 但在视图的底部,我希望有一个类似于菜单的东西,当我使用canvas.rotate()时,它不会旋转。这意味着我想旋转这些矩形和椭圆形,但不想旋转将使用相同画布创建的菜单 @Override protected void onDraw(Canvas canvas) { float ringWidth = textHeight + 4

我有一个自定义视图,它包含许多矩形和椭圆形,还有。。。。。我可以使用canvas.rotate(度数、中心距、中心距)旋转整个画布(矩形、椭圆形和…)

但在视图的底部,我希望有一个类似于菜单的东西,当我使用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);
        .
        .
      }

您可以使用画布上的save和restore方法在转换中绘制内容,然后恢复到原始状态。下面是一个例子:

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
}
希望这有帮助:)