您的位置:首页 > 移动开发 > Android开发

android动画之SurfaceView

2016-07-30 00:00 225 查看
由于view有以下两个缺陷:
1、缺乏双缓冲机制;
2、当需要更新view上面的图像时,必须重绘整个图像,效率低下;
因此SurfaceView登场了!SurfaceView一般与SurfaceHolder结合使用,SurfaceHolder用来在SurfaceView上画图,它使用下面的方法来获取Canvas对象:
lockCanvas(Rect rect); //获取指定区域,画图时只对指定区域进行更新,可以提高效率。
lockCanvas();
绘图完成后,使用下面的方法来释放绘图,提交所绘制的图形:
unlockCanvasAndPost(Canvas canvas);
需要说明的是该方法之后绘制的图形还处于缓冲中,下次再lockCanvas时,可能会"遮挡"它。
SurfaceHolder还可以添加回调函数,callbak中有三个方法:
public void surfaceCreated(SurfaceHolder holder); //SurfaceView被创建时调用
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height); //SurfaceView格式或大小发生变换时调用
public void surfaceDestroyed(SurfaceHolder holder); //SurfaceView被销毁时调用

看一个例子,基于SurfaceView开发一个示波器,效果如下:



关键代码如下:
view1 = (SurfaceView)findViewById(R.id.surfaceview1);
holder = view1.getHolder();

Canvas canvas = holder.lockCanvas(new Rect(cx,cy-2,cx+2,cy+2));
canvas.drawPoint(cx,cy,paint);
...

holder.unlockCanvasAndPost(canvas);

完整源码下载地址:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: