关于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(); }
相关推荐
星星有所不知 2020-10-12
MIKUScallion 2020-07-05
jinxiutong 2020-05-10
MIKUScallion 2020-04-11
MIKUScallion 2020-02-22
jinxiutong 2020-02-13
大地飞鸿 2020-02-11
jinxiutong 2020-02-10
大地飞鸿 2020-11-12
jinxiutong 2020-07-26
songfens 2020-07-05
songfens 2020-06-11
songfens 2020-06-08
northwindx 2020-05-31
northwindx 2020-05-31
northwindx 2020-05-27
northwindx 2020-05-25