View

只是把Graphic 资源(images,shapes,colors,pre-defined animation等等这些Android已经实现的一些画图操作)放入View体系,由系统 来将这些Graphic画出来。

View canvas — 使用普通 View 的 Canvas 画图

(1)定义一个自己的View :class your_view extends View{} ;
(2)重载View的onDraw方法:protected void onDraw(Canvas canvas){} ;
(3)在onDraw方法中定义你自己的画图操作 ;
除此之外:可以定义自己的Btimap:
// 当自己新建 Canvas 时,需要自己创建一个 bitmap 来存储和显示绘图结果
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);// 必须将这个Bitmap放入View的canvas中,画的 图才能显示出来

Surface View Canvas — 使用专门的 SurfaceView 的 Canvas 来画图

(1)定义一个自己的 SurfaceView : class your_surfaceview extends SurfaceView implements SurfaceHolder.Callback() {}
(2)实现 SurfaceHolder.Callback 的3个方法: surfaceCreated()、surfaceChanged() 、surfaceDestroyed() ;
(3)定义自己的专注于画图的线程: class your_thread extends Thread()

(4)重载线程的 run() 函数。一般在 run 中定义画图操作,在 surfaceCreated 中启动这个线程

2D 绘图相关 API

要掌握Android 2D Graphics必须要熟悉这三个包的各种API。

  • 绘图基本要素:
    Canvas
    Paint
    Bitmap,BitmapFactory,BitmapRegionDecoder,ImageFormat,Movie,NinePatch,YuvImage

  • 过渡模式:
    Xfermode,AvoidXfermode,PixelXorXfermode,PorterDuffXfermode
    PorterDuff

  • 过滤:
    1、rgb过滤 ColorFilter ,ColorMatrixFilter,PorterDuffColorFilter,LightingColorFilter,PorterDuffColorFilter
    2、alpha过滤 MaskFilter,BlurMaskFilter,EmbossMaskFilter
    3、DrawFilter,PaintFlagsDrawFilter
    变换:
    Matrix,Camera,ColorMatrix

  • 颜色:
    Color

  • 渐变:
    Shader
    BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient

  • 路径
    Path:
    PathEffect,ComposePathEffect,CornerPathEffect,DashPathEffect,DiscretePathEffect,PathDashPathEffect,PathMeasure,SumPathEffect

  • Rasterizer,LayerRasterizer

  • Interpolator,

  • Picture

  • PixelFormat

  • Point,PointF,Rect,RectF

  • SurfaceTexture

  • Typeface

  • Region,RegionIterator

  • Drawable系列

  • Shape系列

总结 2D 画图用到的包

android.view //画图是在View中进行的
android.view.animation //定义了一些简单的动画效果Tween Animation 和 Frame. Animation 等
android.graphics //定义了画图比较通用的API,比如canvas,paint,bitmap等
android.graphics.drawable //定义了相应的Drawable(可画的东西),比如说BitmapDrawable,PictureDrawable等
android.graphics.drawable.shapes //定义了一些shape

二、3D画图

针对 3D 画图 SDK 上讲得很简单,就是继承一个 View,然后在这个 View 里面获得 Opengl 的句柄进行画图,道理和 2D 一样的,差别就是一个是使用 2D 的 API 画图,一个是使用 3D 的。
因为 3D openGl ES 具有一套本身的运行机制,比如渲染的过程控制等,因此 Android 提供了一个专门的画图类 GLSurfaceView。这个类被放在一个单独的包 android.opengl 里面,其实现了其他 View 所不具备的操作:
(1) 画图是在一个专门的 Surface 上进行, 这个 Surface 可以最后被组合到 android 的 View 体系中;
(2) Opengl 的运行周期可以与 Activity 的生命周期协调
(3) 具有 OpenGL ES 调用过程中的错误跟踪,检查工具,方便了 Opengl 编程过程的 debug
(4) 可以根据 EGL 的配置来选择自己的 buffer 类型,比如 RGB565,depth=16
(5) 通过 render 来画图,而且 render 对 Opengl 的调用是在一个单独的线程中
GLSurfaceView 是 Android 提供的一个非常值得学习的类,它实际上是一个如何在 View 中添加画图线程的例子,如何在 Java 中使用线程的例子,如何添加事件队列的例子。具体的源码在:/framworks/base/opengl/java/android/opengl/GLSurfaceView.java
GLSurface 画 3D 图形的步骤:
(1)选择画图需要的buffer类型即:EGL配置 setEGLConfigChooser();
(2)选择是否需要Debug信息
setDebugFlags(int)
setGLWrapper(GLSurfaceView.GLWrapper)
(3)为 GLSurfaceView 注册一个画图的 renderer
setRenderer(GLSurfaceView.Renderer)
(4) 设置 render mode:持续渲染或根据命令渲染, setRenderMode(int)
(5) Opengl 的运行和 Activity 的生命周期绑定在一起, 也就是说 Activity pause 的时候,opengl 的渲染也必须 pause。除此之外,GLSurfaceView 提供了线程间交互的函数 queueEvent(Runnable),可以用在主线程和 render 线程之间的交互

class MyGLSurfaceView extends GLSurfaceView {private MyRenderer mMyRenderer;public void start() {mMyRenderer = ...;setRenderer(mMyRenderer);}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {queueEvent(new Runnable() {// This method will be called on the rendering// thread:public void run() {mMyRenderer.handleDpadCenter();}});return true;}return super.onKeyDown(keyCode, event);}
}

Android2D绘图一相关推荐

  1. Android-2D绘图

    概述 Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0 大部分2D使用的api都在android.graphics和androi ...

  2. Android2D绘图四

    Paint 常用属性 setColor() Paint.setColor(Color.BLUE); 1 setARGB(a, r, g, b) setStrokeWidth() // 线宽 setAl ...

  3. Android2D绘图二

    注意:Android手机的屏幕的上边位x轴,左边为y轴坐上顶点为原点(0,0) Canvas Sample 及常用函数 常用方法 drawARGB / drawRGB / drawColor 使用单一 ...

  4. Android绘图机制与处理技巧-更新中

    概述 这里我们主要来探讨下 Android屏幕的相关只是 Android绘图技巧 Android图像处理技巧 SurfaceView的使用 绘图技巧中,医生讲的比较粗略,更多的细节参考了 Keegan ...

  5. Android--使用Canvas绘图

    前言 除了使用已有的图片之外,Android应用常常需要在运行时根据场景动态生成2D图片,比如手机游戏,这就需要借助于Android2D绘图的支持.本篇博客主要讲解一下Android下使用Canvas ...

  6. android 手机九宫格解锁实验报告,Android数独游戏实验分析报告.pdf

    本科生实验报告 实验课程 Android 课程设计数独游戏 学院名称 信息科学与技术学院 专业名称 物联网工程 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一五 年 十 月 二〇一五 年 十 ...

  7. Plotly_绘图画图作图交互

    20210601 https://zhuanlan.zhihu.com/p/87163211 画地图 今天就带你深入体验易于使用.文档健全.功能强大的开源 Python 绘图库 Plotly,教你如何 ...

  8. 给手绘图着色(添加颜色或色彩):CVPR2020论文点评

    给手绘图着色(添加颜色或色彩):CVPR2020论文点评 Learning to Shade Hand-drawn Sketches 论文链接:https://arxiv.org/pdf/2002.1 ...

  9. 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...

    地形图(topographic map)指的是地表起伏形态和地理位置.形状在水平面上的投影图.具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上 ...

最新文章

  1. 贪吃蛇python零基础教程_自学python-tkinter项目-贪吃蛇的程序(0基础入门学习)...
  2. mysql教程联合索引_MySQL中的联合索引学习教程
  3. 一个母婴电子商务网站贝贝网的大数据平台及机器学习实践【转】
  4. 微服务软件架构的认识和设计模式
  5. Spring注解开发-初始化/销毁方法注解
  6. WinAPI——Windows 消息
  7. 华为方舟编译器 PK 微软苹果谷歌编译器,到底谁胜出?
  8. C++11 委托构造函数
  9. Ubuntu中添加应用程序快速启动器的方法
  10. 基于springboot+vue的(高考)志愿录取系统(前后端分离)
  11. FileUtils工具类学习
  12. Flameshot——最好用的ubuntu截图工具
  13. 视觉SLAM十四讲中P61作业7。
  14. cint、int、fix的区别
  15. 常见的一些代码编辑器
  16. Java开源工具库使用之Apache commons-lang3
  17. f烽火ExMobi,移动应用平台的互联网思维
  18. EF实体类种的Virtual关键字作用
  19. 景安服务器不稳定,服务器常见问题二
  20. 为什么宇宙会将最大速度限制在光速

热门文章

  1. Struts2与传统模式的对比,核心控制器从servlet变成了过滤器,!!
  2. 个人总结---连通图的最小生成树算法
  3. Using a Comparison Function for the Key Type
  4. js学习小计1-onbeforeunload
  5. java 内存泄露 jmap_jmap命令 检查内存泄漏
  6. python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
  7. html5图片比例控制,按比例调整图像大小以适应HTML5画布
  8. linux noprobe参数,find 命令的参数详解
  9. _java等领域_测试、集成等领域最好的Java工具
  10. mysql一个事务多个log_MySQL的两阶段事务提交是否先写binlog再写redolog也可行?