canvas中的rotate()无效

Din*_*ata 0 android android-animation android-canvas

当我将canvas方法与canvas对象一起使用时,canvas对象不会旋转.为什么会这样?这是我的代码

package com.example.hello;

    import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout;

    public class CanvasDrawExample extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    setContentView(R.layout.example);
    LinearLayout rl=(LinearLayout)findViewById(R.id.rl);
     rl.addView(new CircleView(this));
    }
public class CircleView extends View
{

    public CircleView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub


    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub


        Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setStrokeWidth(100);
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.BLUE);

        canvas.drawRect(200, 100, 200, 100, p);
        canvas.save();  
        canvas.rotate((float)145);

        canvas.restore();
    }

}
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*uré 5

保存画布,旋转它然后恢复它而不对其进行任何绘制.如果您尝试将矩形145º向右旋转,请执行以下操作:

@Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub

        canvas.save();  
        canvas.rotate((float)-145,canvas.getWidth()/2,canvas.getHeight()/2);

        Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setStrokeWidth(100);
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.BLUE);

        canvas.drawRect(200, 100, 200, 100, p);


        canvas.restore();
    }
Run Code Online (Sandbox Code Playgroud)

此外,不建议在onDraw()中实例化和定义Paint.您应该在构造函数中声明并定义它,然后重用它.

  • 为了在画布上旋转对象,您必须旋转画布本身而不是对象(绘图)。把画布想象成一张纸。如果你想画一个向右 45º 的矩形,你可能要做的是将纸向左旋转 45º,绘制矩形,然后将纸放回初始位置。这就是您使用 save()、rotate() 和 restore() 方法所做的事情。 (2认同)