关于Android中的Canvas的学习笔记

   关于Canvas,先看API。在Dev Guide中的Canvas and Drawables中介绍到:   在UI线程中刷新view需要调用invalidate(),并处理回调方法onDraw()。如果在一个独立线程中,比如管理一个SurfaceView的线程中,就不需要调用invalidate()了。

   一个Canvas就是一个画布,它通过了各种draw方法的接口。一个Canvas必须有一个bitmap对象,这个bitmap对象才是真正被绘制的对象。可以这样定义一个Canvas:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

    Canvas类的API中介绍到:一个Canvas类能够处理各种"draw"方法。为了绘制事物,必须要有四个基本组件:一个用来放置像素的Bitmap对象,一个处理"draw"方法的Canvas对象,一个绘制对象(如矩形,路径,文本等)以及一个画笔(Paint)。

   然后,Canvas中除了有一系列draw和set方法外,还有一对方法save和restore,使用他们可以对canvas中的局部元素实现修改而保持其他元素不变。如某个元素的旋转。从android sdk源码中可以看到save方法的源码:

/* (non-Javadoc)
     * @see android.graphics.Canvas#save()
     */
    @Override
    public int save() {
        // get the current save count
        int count = mGraphicsStack.size();

        // create a new graphics and add it to the stack
        Graphics2D g = (Graphics2D)getGraphics2d().create();
        mGraphicsStack.push(g);

        // return the old save count
        return count;
    }

 从中可以看到save()是将当前的canvas做了一个备份放到了一个Graphics的stack中去了,然后使用的restore:

@Override
    public void restore() {
        mGraphicsStack.pop();
    }

相关推荐