Android图形图画学习(9)——探索SurfaceView的框架结构
2013-10-29 16:16
295 查看
上图是实现SurfaceView绘图的框架。我们需要实现的是长横线以下的部分。
对这个框架作一个说明:
回调的典型作用是实现控制反转,即事先预定好框架,在SurfaceView.java的updateWindow()函数中,根据实际情况,系统会调用SurfaceHolder.Callback.surfaceCreated(mSurfaceHolder)等。这只是一个框架,在没有实现的SurfaceHolder.Callback接口中,surfaceCreated()等函数没有作任何操作。等我们实现了这个接口之后,系统对这个接口函数的调用才有了实际的意义。
这也是回调的意义所在,框架师事先定好框架,但不定义任何内容,这样系统调用没有任何意义,程序员根据不同的情况给框架中填充不同的内容后,系统调用就有了实际意义,也产生了不同的实现。
通过上图,我们也可以了解,真正画图的操作是在SurfaceHolder.callback中实现的(callback运行小线程,真正的画图在小线程中实现)。SurfaceHolder控制着"实现"。SurfaceView内置SurfaceHolder为成员变量,通过操作这个成员变量从而把画图贴到这个view上来。
通过如上框架,可以作一个简单的实例:
public class Test extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } //内部类 class MyView extends SurfaceView implements SurfaceHolder.Callback{ SurfaceHolder holder; public MyView(Context context) { super(context); holder = this.getHolder();//获取holder holder.addCallback(this); //SurfaceHolder作为view的成员变量控制着画图实现 //setFocusable(true); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { new Thread(new MyThread()).start(); //这个是Callback这里放在了和view同一个地方,我们也可以移到外面去另作实现,效果等同 } @Override public void surfaceDestroyed(SurfaceHolder holder) { } //内部类的内部类 class MyThread implements Runnable{ @Override public void run() { Canvas canvas = holder.lockCanvas(null);//获取画布 Paint mPaint = new Paint(); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(40,60,80,80), mPaint); holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像 } } } }
相关文章推荐
- Android图形图画学习(8)——SurfaceView
- 2014-11-6Android学习------SurfaceView的框架源码
- Android游戏开发之构建游戏框架View与SurFaceView的区别(十)
- Android之SurfaceView学习(一)
- Android图形图画学习(10)——AlphaBitmap
- Android之SurfaceView学习
- Android——View的事件分发机制(学习Android开发艺术探索)
- (学习笔记)Android使用SurfaceView编写“迷宫搜索”例子
- Android的图形与图像处理之六 SurfaceView实现动画
- android学习12——重载SurfaceView一些方法的执行顺序
- android:SurfaceView绘制图形
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系 && camera的takePicture实例
- QGraphicsView 框架学习(一)、图形元素的编辑
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
- Android之SurfaceView学习(一)
- Android之SurfaceView学习
- Android游戏开发之构建游戏框架View与SurFaceView的区别(十)
- Android编程之SurfaceView学习示例详解
- Android之SurfaceView学习(转)
- Android之SurfaceView学习(一)