`
天天向上1989
  • 浏览: 419347 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

关于canvas的save()及restore()方法

 
阅读更多
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceView;

public class MyView1 extends SurfaceView
{

	private Bitmap mBitmap;

	private Paint mPaint;

	public MyView1(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		mPaint = new Paint();
		this.initBitmap();
	}

	private void initBitmap()
	{
		mBitmap = BitmapFactory.decodeResource(getResources(),
				R.drawable.ic_launcher);
	}

	@Override
	public void draw(Canvas canvas)
	{
		super.draw(canvas);

		mPaint.setColor(Color.BLUE);
		canvas.drawRect(100, 200, 200, 300, mPaint);

		canvas.save();
		canvas.rotate(45);
		mPaint.setColor(Color.RED);
		canvas.drawRect(150, 10, 200, 60, mPaint);
		canvas.restore();

		mPaint.setColor(Color.GREEN);
		canvas.drawRect(200, 10, 250, 100, mPaint);
	}

}

 上图代码绘制出的view如下图:

如掉save和restore方法(38和42行),意味着绿色的图形也受到38和42行之间,对canvas操作的代码影响,也会旋转,如下图:


分享到:
评论

相关推荐

    Android canvas.save()和canvas.restore()的理解

    `save()`和`restore()`是`Canvas`中两个非常关键的方法,它们主要用于管理绘图状态,确保复杂绘图过程中的可逆性和精确性。在本文中,我们将深入理解这两个方法的作用以及如何在实际应用中使用它们。 首先,`canvas...

    android中canvas的save和restore用法

    `save()`和`restore()`是`Canvas`类中两个非常重要的方法,它们用于管理和恢复绘图状态,确保复杂的绘图操作能够正确无误地进行。在本文中,我们将深入探讨这两个方法的用法、原理以及它们在实际开发中的应用。 `...

    Android Canvas save restore演示

    `save()`和`restore()`是Canvas中的两个关键方法,它们在复杂的绘图场景中起到至关重要的作用。本演示将深入探讨这两个方法以及它们在Android图形绘制中的应用。 `Canvas.save()`方法的主要功能是保存当前Canvas的...

    android 中canvas的save和resotre用法

    `save()`和`restore()`是Canvas的重要方法,用于保存和恢复绘图状态,这对于实现复杂的图形变换、绘制流程控制以及避免不必要的计算至关重要。下面将详细阐述这两个方法的用法和应用场景。 1. `save()`方法: `save...

    微信小程序canvas实现矩形元素自由移动

    为提高性能,可以使用`ctx.save()`和`ctx.restore()`方法保存和恢复当前绘图状态,或者使用局部重绘,只对移动的矩形区域进行更新。 6. **动画效果**:如果希望矩形平滑移动,可以使用定时器和缓动函数来实现。在`...

    微信小程序小技巧系列《十一》canvas中的save和restore,view使用bindtap传值 ...

    一:canvas中的save和restore   一直以来没有特别明白canvas中的save()和restore()函数,这次终于通过微信小程序中使用此函数的时候弄明白了,以下代码可以运行在微信小程序中~~ 看效果: (此图片来源于网络,如有...

    安卓绘图 canvas 绘图 平移缩放

    3. 在onDraw()方法中,首先调用canvas.save()保存当前的状态,以便后续可以恢复。 4. 使用canvas.translate()和canvas.scale()来设置平移和缩放操作。 5. 执行绘图操作,例如绘制矩形、圆形等。 6. 调用canvas....

    使用Canvas类绘制android机器人

    在绘制过程中,我们可以使用save()和restore()方法来保存和恢复Canvas的状态。这对于进行多次绘制并且需要保持某些属性不变(如坐标变换或剪裁区域)的情况下非常有用。例如,在绘制机器人的不同部分时,可能会涉及...

    Android canvas画图操作之切割画布实现方法(clipRect)

    `onDraw`方法中的`canvas.save()`和`canvas.restore()`用于保存和恢复画布的状态。`save()`在调用时会记录当前画布的所有属性,包括剪裁区域,然后在后续的`restore()`调用中恢复到保存的状态。这样可以确保在复杂的...

    canvas动态画出视图树

    另外,为了提高性能,可以考虑使用剪裁区域(`clip` 方法)或者保存/恢复状态(`save` 和 `restore` 方法)来避免不必要的重绘。如果视图树非常大,还可以采用分层渲染策略,只绘制可见部分或使用虚拟DOM技术优化。 ...

    HTML5:Canvas教程

    translate() 方法可以移动坐标系,rotate() 方法可以旋转坐标系,restore() 方法可以恢复之前的坐标系,save() 方法可以保存当前的坐标系。 Canvas 还提供了多种绘制方法,如 stroke() 方法绘制轮廓,strokeText()...

    canvas 原位置旋转图片

    `restore`方法用于撤销最近一次调用`save`方法后的所有状态改变,包括`translate`和`rotate`,使得画布恢复到初始状态,以便下一次绘图。 通过以上步骤,我们可以成功地在Canvas上实现图片在原位置的旋转。这个例子...

    android利用Paint在Canvas上实现竖排写字

    - 使用`canvas.save()`保存当前Canvas的状态,防止坐标系变化影响其他元素。 - 通过`canvas.translate(0, -textHeight)`将坐标原点向上移动一个文本高度的距离,确保下一行文本在上一行的下方。 - 使用`paint....

    html5 canvas中文文档

    `restore()`方法用来恢复之前保存的状态,它会弹出栈顶的状态并应用到Canvas上,从而撤销自上次`save()`之后所有的样式和变换更改。 ```javascript ctx.restore(); ``` #### 三、Canvas坐标系 - **translate...

    Android canvas 放大 缩小 平移

    在自定义View的onDraw()方法中,我们通常会获取到一个Canvas对象,然后在这个对象上进行绘制。 放大和缩小通常涉及到矩阵变换。Android的Matrix类提供了对2D变换的支持,包括缩放(scale)、平移(translate)和...

    html5 canvas.rar

    此外,还可以使用`clearRect`来清除指定区域,`save`和`restore`用于保存和恢复当前绘图状态。 在"image"文件中,可能包含了一个图像资源,我们可以利用Canvas API将图片加载到canvas上并进行处理。`drawImage`方法...

    canvas 绘制会动的钟表

    canvas.restore(); // 绘制分针 canvas.save(); canvas.rotate(minuteAngle, getWidth() / 2, getHeight() / 2); canvas.drawLine(getWidth() / 2, getHeight() / 2 - 150, getWidth() / 2, getHeight() / 2 +...

    android canvas画人

    可以通过`canvas.save()`和`canvas.restore()`来保存和恢复Canvas的状态,实现组合绘制。这样可以在不干扰其他绘制的情况下进行局部变换,如平移、旋转、缩放。 7. **动画**: 若要使人物动起来,可以使用`...

    Canvas2D梯形拉伸.zip

    在实际应用中,可能还会涉及到性能优化,例如通过保存和恢复状态(`save()` 和 `restore()`)来避免不必要的重绘,或者使用Web Workers来异步处理图像数据,以减少主线程的负担。 总的来说,“Canvas2D梯形拉伸”是...

    使用canvas画线,位移,旋转,绘制五角星。

    默认情况下,Canvas的坐标原点位于视图左上角,但可以通过`save()`和`restore()`方法保存和恢复状态,改变旋转的基点。 ```java canvas.save(); canvas.rotate(angle, pivotX, pivotY); // 在此之后的绘制都会受到...

Global site tag (gtag.js) - Google Analytics