关于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(); }
推荐阅读
-
关于Android中的Canvas的学习笔记
-
MySQL源码学习:关于慢查询日志中的Rows_examined=0
-
photoshop学习 php学习笔记 面向对象中[接口]与[多态性]的应用
-
iOS学习——(转)iOS中关于通知的使用
-
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结_MySQL
-
android (java) 中关于文件、文件夹的一些操作
-
MySql官方手册学习笔记3―MySql中的存储过程简介_MySQL
-
JavaScript中的Number数字类型学习笔记
-
php学习笔记 面向对象中[接口]与[多态性]的应用
-
PHP中的cURL请求及示例学习笔记_PHP教程