Canvas


http://developer.android.com/guide/topics/graphics/2d-graphics.html
  利用Android框架,有两种方法可以实现2D绘图。
  1、绘制图像或动画到布局之中的View对象。此为通过一般View层次体系结构的处理过程来实现,只需简单定制图案在View对象运动即可。
  2、将图像直接绘制到Canvas。需要通过主动调用有关类的OnDraw()方法,或某种draw...()方法(如drawPicture)来实现。对动画掌控能力有较高要求。
  方法1简单易学,如果只是为了绘制简单图案,运行中不会做什么动态改变,且对性能没什么要求,那就选择方法1好了,用不着再众里寻他千百度。比如绘制静态图案,或者已定义好的动画(注:我的理解是gif动画、png动画)。
  方法2屌丝品质,框架下以画布为基础,定期重绘的必选佳品。比如视频游戏。但又两种具体实现方式:
  一是在同一UI Acitivity(即布局内创建自定义View组件那里)的线程内,通过调用invalidate()和处理onDraw()回调函数来实现。
  二是在不同的线程内,即管理SurfaceView类及实现之处,速度只与线程的能力有关,而不需要调用invalidate()。


  ·用Canvas绘制
  (建议对照Windows的GDI概念进行学习)
  要什么样的结果就需要做出不同程度的努力,要实现专业绘图及动画控制就需要依赖Canvas(注:至少SDK的解决方案就是如此,NDK的话,自求多福:))。
  Canvas(画布)是一个虚拟概念,是我们想要绘制的图案的落笔之处,包含了若干的绘画函数调用接口。实际上,绘制到Canvas的对象,是基于将被重绘至窗体的隐含Bitmap来实现。
  在用onDraw()函数实现绘画的事件中,画布就已经为我们准备好了,我们需要的就是在其上画点什么。当然,你也可以在处理SurfaceView对象时,通过SurfaceHolder.lockCanvas()来请求获取一个画布。然而,如果需要新建一个的话,就必须自定义一个Bitmap,以便在其上做实际的绘画操作。画布总会需要Bitmap,于是就需要如下建立一个新的画布:
Bitmap b = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
Canvas c =newCanvas(b);
  当利用画布进行绘制时,我们可以利用Canvas.drawBitmap(Bitmap,...)将定义好的Bitmap带入另一个画布。 建议,最终绘制到View.onDraw()或SurfaceHolder.lockCanvas() 提供的画布。

  Canvas类有一系列的绘制方法,如drawBitmap(...)、drawRect(...)、drawText(...)等等,其他类的话,可能就需要利用他们包含的draw()方法了。例如,想把Drawable类放置到画布上,就是利用了Drawable类自己的draw()方法,而画布对象作为了该方法的参数。 

  基于View的Canvas

  如果不是做实时游戏,不需要考虑帧的速率,那么利用View类onDraw()方法中的Canvas类就足够好了。

  继承View类,重载onDraw()方法,Android框架就会预定义一个Canvas。

  Android框架在适当的时候就会调用你的onDraw方法,当你认为你需要重新绘制时,调用invalidate()方法,以通知Android框架重绘并调用你的onDraw方法。

  需要注意,如果不是通过主线程通知Android框架需要重绘的话,必须调用的是postInvalidate()!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值