欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Android中的Canvas的学习笔记

程序员文章站 2024-01-09 10:25:34
...

   关于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();
    }

 

上一篇:

下一篇: