2012.2.28 绘图相关类的思考

  Canvas类 专门用于向画布上画东西,画布实际上是显示器的缓冲区。向画布上画东西,实际上就是修改缓冲区中的数据,最后通过调用post等方法,把画布(缓冲区)上的东西显示到屏幕上。

   Display 专门用于获取硬件——显示器的相关数据,可以提供屏幕尺寸和分辨率的值。

   Surface类 该类会构建一个原始缓冲区raw buffer,这个缓冲区被屏幕合成器(screen compositor)管理。surface实际上就是对显示器缓冲区的管理操作。一个显示屏幕对应着有一个屏幕缓冲区,也即有一个surface对象,我们调用这个对象就可以对缓冲区进行操作。调用lockCanvas方法后就会获取一个canvs对象,然后使用该对象就可以像屏幕缓冲区里添加要显示的数据。surface中提供了好多方法可以对屏幕缓冲区进行操作,可以设置画布的大小,颜色,透明度,矩阵等。

  在SurfaceView中,有一个接口surfaceHolder专门用来管理对surface的操作,调用lockCanvas后就可以修改缓冲区中的数据,调用unlockCanva后关闭对缓冲区的操作,调用post后就会把缓冲区中的数据画到屏幕上。

  View类 是图形界面设计的基本类,view表示screen上的一个矩形区域,view对象可以对此区域惊醒图像绘制和event监听。android中的windows指的是手机窗口,在该窗口里可以有多个view对象。View的有许多子类,各负责一些专门的显示。

  View与SurfaceView的区别:程序从Activity启动后就有一个UI主线程在运行。这个线程负责响应按键,触屏等于用户交互的消息。 而view中的画图操作都是通过消息传递给UI主线程来执行的,这时如果操作复杂的话就会占用很长时间,那么对用户事件的响应就会变得迟钝。 而在SurfaceView中是另外开启了一个线程,这个线程专门用来执行画图操作(直接与android的底层交流,不在需要经过UI线程)。这样就会及时的响应用户事件了。 view类及其子类具有的一些共性: 不同的子类有不同的焦点,可以设置自己的属性;设置焦点,每个子类都可以获取焦点;设置监听器(监听某个状态的变化,例如点击,触摸,焦点等);设置可见性;

posted @ 2012-02-28 11:49  quding0308  阅读(147)  评论(0编辑  收藏  举报