`

Android canvas的save()和restore()用法

阅读更多

在读Android SDK里面的samples里面游戏的时候,很多时候都看到对canvas的save()和restore()运用。

下面是个小程序,使用了这两个方面,使得旋转红色方块的时候,保证蓝色方块不受影响。

 

 

 

代码如下:

package com.ray.test;

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.SurfaceHolder;
import android.view.SurfaceView;

public class Test extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }
    
    class MyView extends SurfaceView implements SurfaceHolder.Callback{

    	private SurfaceHolder mHolder;
    	private Canvas canvas;
		public MyView(Context context) {
			super(context);
			mHolder = getHolder();
			mHolder.addCallback(this);
		}
		
		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			
		}

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			canvas = mHolder.lockCanvas();
			Paint mPaint = new Paint();
			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();
			mHolder.unlockCanvasAndPost(canvas);
		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			
		}
    	
    }
}

 

分享到:
评论
7 楼 hurry07 2010-06-24  
puhao7117441 写道
但是貌似有个问题是,旋转canvas和直接旋转对象两个比起来,旋转画布所得到的质量似乎要低一些……

这个可以通过设置画笔的抗锯齿来抵消, 不过有的图片即使抗锯齿了也不行
6 楼 白夜古月 2010-06-18  
意思就是 save() 和restore() 是用来划定操作的一个范围  这里可以不只是旋转
5 楼 puhao7117441 2010-06-17  
但是貌似有个问题是,旋转canvas和直接旋转对象两个比起来,旋转画布所得到的质量似乎要低一些……
4 楼 hurry07 2010-06-16  
多谢楼主的分享, 看了代码就清晰很多了

另外有一个问题
canvas.rotate(45);  是逆时旋转了 45 度 而matirx.setRotate(45) 是不是顺时针的 45
3 楼 bieguojun 2010-04-16  
lishuyan0818 正解
2 楼 lishuyan0818 2010-03-15  
其实楼主的代码 save 和 restore并不会影响蓝色方块的绘制。

看看我下面的代码,如果有save 和 restore,那么平移、缩放、旋转等操作只对 save到 restore之间的代码有影响。也就是说只有红色的方块是旋转的。
如图:



            canvas = mHolder.lockCanvas();  
            Paint mPaint = new Paint();  
            mPaint.setColor(Color.BLUE);  
            canvas.drawRect(100, 200, 200, 300, mPaint);  
              
            canvas.save();  //注释1
            canvas.rotate(45);  
            mPaint.setColor(Color.RED);  
            canvas.drawRect(150, 10, 200, 60, mPaint);  
           canvas.restore(); //注释2 
            
            
            mPaint.setColor(Color.GREEN);  
            canvas.drawRect(200, 10, 250, 100, mPaint);  
            mHolder.unlockCanvasAndPost(canvas);  


如果上面的代码,注释1和注释2部分的代码被注释的话,那么绿色的方块一样是被旋转的。
如图:


1 楼 kevin2562 2010-03-09  
@Override 
        public void surfaceCreated(SurfaceHolder holder) {  
            canvas = mHolder.lockCanvas();  
            Paint mPaint = new Paint();  
            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();  
            mHolder.unlockCanvasAndPost(canvas);  
        }  
这段代码搂主能加上注释么?
纯代码理解有困难

相关推荐

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

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

    android中canvas的save和restore用法

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

    Android Canvas save restore演示

    在"Android_Graphics_Canvas_2"这个压缩包中,可能包含了示例代码,这些代码展示了如何使用`save()`和`restore()`进行图形绘制和变换操作。你可以通过学习和运行这些代码来更深入地理解这两个方法的工作原理和应用...

    android 中canvas的save和resotre用法

    通过掌握`save()`和`restore()`的使用,开发者可以更灵活地控制Android Canvas上的图形绘制,实现更丰富的视觉效果和交互。在实际项目中,这两个方法经常被用来处理动画、视图重绘以及自定义View的复杂逻辑。

    Android Canvas绘图Demo

    在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是Android Graphics系统的一部分。...通过熟练运用Canvas的各种绘图方法和配合Paint对象,开发者可以自由地在屏幕上创造出任何想要的视觉表现。

    Android canvas 放大 缩小 平移

    查看源码,研究其中的onDraw()方法和如何处理触摸事件,是学习和理解Android Canvas放大、缩小和平移的很好途径。 总的来说,Android的Canvas和Matrix类为开发者提供了强大的图形绘制能力,通过熟练掌握它们,你...

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

    - **Canvas**:Canvas是Android中的画布,提供了各种绘制方法,如drawRect(), drawText()等,让我们能够在屏幕上绘制图形和文本。 - **Paint**:Paint是Android的画笔,它定义了图形和文本的样式,如颜色、字体...

    android-canvas.rar_ android Canvas_android canvas_android canv

    5. **保存与恢复状态**:Canvas支持保存和恢复绘图状态,使用`save()`和`restore()`方法可以确保在复杂绘图过程中保持状态的一致性,避免错误的叠加。 6. **变换操作**:Canvas提供了一系列的变换方法,如`...

    android canvas 画图

    3. **保存与恢复状态**:Canvas提供了`save()`和`restore()`方法,用于保存和恢复当前的绘图状态。这在需要进行复杂的图形变换时非常有用,例如旋转、缩放、平移等,可以避免这些变换对后续绘图的影响。 4. **绘制...

    Android下使用Canvas画图

    通过理解和实践上述知识点,你将能够熟练地在Android平台上使用Canvas进行各种复杂的图形绘制,为用户提供丰富的视觉体验。对于Canvas的深入学习,参考提供的博客链接会有更多详细信息和实战案例。

    android canvas画人

    在Android开发中,Canvas是图形绘制的核心类,它提供了在Bitmap上进行绘制的基本接口。...通过熟练掌握Canvas的各种方法和技巧,开发者可以创造出丰富多样的交互式图形界面,包括绘制出栩栩如生的人物形象。

    Android Canvas画布使用Demo源码.rar

    下面我们将详细探讨Android Canvas的使用方法以及相关知识点。 1. **Canvas的基本概念** - Canvas是Android中的一个类,它提供了一个画布,开发者可以在上面执行各种绘图操作,如绘制线条、矩形、圆形、路径、文本...

    自定义view(Paint和Canvas)

    5. **save()** 和 **restore()**:保存和恢复Canvas的状态,用于进行复杂的图形变换,如旋转、缩放、平移等。 6. **translate()**、**scale()** 和 **rotate()**:这些方法用于改变Canvas的坐标系统,从而影响后续...

    安卓绘图 canvas 绘图 平移缩放

    总之,掌握Canvas的translate()和scale()方法是Android开发中实现复杂图形动画和交互的基础。通过灵活运用这些方法,开发者可以创造出各种富有创意的用户界面和动态效果。在实际项目中,可以根据需求结合其他方法,...

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

    本篇文章将详细介绍如何使用`clipRect`方法来切割Android Canvas画布,以及它的工作原理和相关选项。 `clipRect`方法允许开发者限制在画布上绘制的区域,换句话说,它可以帮助我们“剪裁”或“切割”画布。此方法的...

    Android Canvas Demo

    - 在onDraw()方法中,首先调用canvas.save()保存当前的状态,然后进行绘制操作,如canvas.drawBitmap()、canvas.drawText()等,最后调用canvas.restore()恢复状态。 - 当视图需要更新时,系统会自动调用onDraw()...

    使用Canvas类绘制android机器人

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

    AndroidCanvas:android canvas学习

    总结来说,AndroidCanvas是Android图形绘制的重要工具,掌握了其核心概念和使用方法,开发者就能创建出丰富多样的用户界面和动态效果。在实际开发中,应结合其他图形类如Paint、Path等,灵活运用Canvas的各种功能,...

    安卓Android源码——(Canvas画布).rar

    此外,Canvas支持图层的概念,通过`save()`和`restore()`方法可以保存和恢复绘图状态,这对于绘制复杂图形时保持一致性非常有用。同时,`clipRect()`和`clipPath()`可以限制后续绘制操作的区域,实现局部剪裁的效果...

    安卓Android源码——(Canvas画布).zip

    除了基本的绘制API,Canvas还支持组合操作,如矩阵变换(translate、rotate、scale、skew)和保存/恢复状态(save()和restore())。这些功能使得复杂的图形动画和自定义视图成为可能。例如,通过平移、旋转或缩放...

Global site tag (gtag.js) - Google Analytics