注:本文译自:http://developer.android.com/guide/topics/graphics/2d-graphics.html
Android框架API提供了一组2D描画API,使用这些API能够在一个画布(canvas)上渲染自己的定制图形,也能够修改那些既存的View对象,来定制它们的外观和视觉效果。在绘制2D图形时,通常要使用以下两种方法中的一种:
1.把图形或动画绘制到布局中的一个View对象中。在这种方式中,图形的绘制是由系统通常的绘制View层次数据的过程来处理的---只需简单的定义要绘制到View对象内的图形即可。
2.把图形直接绘制在一个画布对象上(Canvas对象)。这种方法,要亲自调用相应类的onDraw()方法(把图形传递给Canvas对象),或者调用Canvas对象的一个draw…()方法(如drawPicture())。在这个过程中,还可以控制任何动画。
当想要把不需要动态变化和没有游戏性能要求的一个简单的图形绘制到View对象时,方法一是最好的选择。例如,在想要在一个静态的应用程序中,显示一个静态图形或预定义动画时,就应该用方法1把图形绘制到一个View对象中。
当应用程序需要经常重新绘制自己的时候,使用方法2把图形绘制到Canvas中,是一个比较好的选择。像视频游戏这样的应用程序,就应该在它们自己的Canvas对象上绘制图形。但是,有更多的方法来完成绘制任务:
1.在与UI的Activity相同的线程中,创建布局中一个定制的View对象组件,就先要调用invalidate()方法,然后处理onDraw()回调方法;
2.在一个独立的线程中,管理着SurfaceView对象,并且使用线程来执行把图形绘制到Canvas对象上的任务(不需要请求invalidate()方法)。
用Canvas对象来绘制图形(Draw with a Canvas)
当要编写专业的绘图或控制图形动画的应用程序时,应该使用Canvas对象来尽心绘制操作。Canvas用一个虚拟的平面来工作,以便把图形绘制在实际的表面上---它持有所有的用draw开头的方法调用。通过Canvas对象,实际上是执行一个底层的位图绘制处理,这个位图被放置到窗口中。
在onDraw()回调方法的绘制事件中,会提供一个Canvas对象,并且只需要把要绘制的内容交给Canvas对象就可以了。在处理SurfaceView对象时,还可以从SurfaceHolder.lockCanvas()方法来获取一个Canvas对象。但是,如果需要创建一个新的Canvas对象,那么就必须在实际执行绘制处理的Canvas对象上定义Bitmap对象。对于Canvas对象来说,这个Bitmap对象是始终必须的,应该像以下示例这样建立一个新的Canvas对象:
Bitmap b
= Bitmap.createBitmap(100,
100,
Bitmap.Config.ARGB_8888);
Canvas c
= new
Canvas(b);
现在就可以在被定义的Bitmap对象上绘图了。在Canvas对象上绘制图形之后,能够用Canvas.drawBitmap(Bitmap, …)的一个方法,把该Bitmap对象绘制到另一个Canvas对象中。通过View.onDraw()方法或SufaceHolder.lockCanvas()方法提供的Canvas对象来完成最终的图形绘制处理是被推荐的。
Canvas类有可以使用的自己的一组绘图方法,如drawBitmap(…)、drawRect(…)、drawText(…)等。还可以使用其他的有draw()方法类。例如,可能想要把某些Drawable对象放到Canvas对象上。Drawable类就有带有Canvas对象作为参数的draw()方法。
分享到:
相关推荐
Android 自定义画布canvas 实现绘制和清空画布功能,内含源码、apk
easy-flow-Vue-element-+JsPlumb实现用canvas绘制流程图,源码,亲测可用。界面也美观!!
wxml-to-canvas 小程序内通过静态模板和样式绘制 canvas ,导出图片,可用于生成分享图等场景
4-7-2(Canvas画布).7z
android-openGL-canvas-master.zip
android-canvas-donut-chart.7z
node-canvas, node Canvas是一个Cairo支持的NodeJS画布实现 节点画布这是版本 2.0.0 -alpha的文档Alpha版本的2.0可以使用 npm install canvas@next 安装。有关从 1.x 升级到 2. x.的指南,请参阅变更日志版本 1.x ...
使用vue 2.0开发的基于 canvas 绘制海报的组件!
项目应用功能提供一个类似Android Canvas类的使用OpenGL来实现实现的canvasGL。可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画...
一个通过在iOS和Android上触摸来进行绘图的React Native组件。 特征 支持iOS和Android 绘画时笔触的厚度和颜色是可变的。 可以一一撤消笔画。 可以将路径数据序列化为JSON。 因此,它可以同步其他设备或其他人并...
这个包提供了一个围绕模块的小包装,主要处理从画布像素数据到模块所需格式的格式转换。 设置 通过 npm 安装: npm install rpi-ws281x-canvas 或来自来源: git clone ...
Leaflet.Canvas-Markers-0.2.0 https://github.com/corg/Leaflet.Canvas-Markers
无限画布无限的html5画布描述提供一个接口,以垂直和水平无限地平移html5画布。 这通过创建无限增长的缓冲画布来工作,当使用.move([x, y])相对移动原点或绝对使用.setOrigin([x, y])相对移动原点时,可以调整画布的...
QML--Canvas画布实现矩形圆形等圈定
Android 自定义画布 绘制 撤销 清空 ssssssssssssss
Vue Konva是一个JavaScript库,用于使用Vue绘制复杂的画布图形。 它提供了声明性和React性绑定。 所有vue-konva组件都对应于具有前缀“ v-”的同名Konva组件。 可用于Konva对象的所有参数都可以在config中作为...
51CTO下载-HTML5 Tutorial - 41 - Saving and Restoring the Canvas
React本机签名画布 对Android && IOS && expo的基于本地签名组件的Canvas进行React 支持Android,iOS和Expo 没有本地依赖项的纯JavaScript实现 经过RN 0.50测试 核心使用 只依靠React和React本机 生成签名的base...
The-World-Is-Our-Canvas-源码.rar
Img-trans 基于Node-canvas和Express的后台图片转换组件