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

Android之SurfaceView的简单介绍

2016-07-06 20:03 543 查看
SurfaceView是View的一个特殊子类,它的目的是另外提供一个线程进行绘制操作。

 要使用SurfaceView进行绘制,步骤如下:

  1.用SurfaceView进行绘制,首先要创建一个对象。

  2.对Surface对象的操作是通过SurfaceHolder来进行的。所以,在你的SurfaceView类初始化的时候,你需要调用 
getHolder()
来获得SurfaceHolder对象,然后用addCallback()加上回调接口(因为你的类实现了相应的接口,所以此处传入this即可)。这个接口中实现的三个回调函数(surfaceChanged(SurfaceHolder holder,
int format, int width, int height),surfaceCreated(SurfaceHolder holder),surfaceDestroyed(SurfaceHolder holder))分别对应Surface何时更改、创建和销毁。

  3.在你的SurfaceView类中应该建立一个线程类,处理绘制操作。为此,要向这个线程类传递上面获得的SurfaceHolder对象。

  4.绘制:在线程类的run()方法中进行绘制操作,通过
lockCanvas()
方法获得Canvas对象,然后就可以用这个对象进行绘制,绘制完成后调用unlockCanvasAndPost(),传入Canvas对象,这时Surface将会按Canvas进行绘制。

关键代码:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<SurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/sv"/>

</LinearLayout>


Activity中:

//要知道SurfaceView什么时候是完全绘制完成的
surfaceView.getHolder().addCallback(new Callback() {

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
System.out.println("created");
new Thread(){
public void run() {
for(int i=0;i<=360;i++){
SurfaceHolder surfaceHolder=surfaceView.getHolder();
//锁住画布
Canvas canvas=surfaceHolder.lockCanvas();
Paint paint=new Paint();
paint.setColor(Color.RED);
canvas.drawArc(new RectF(50, 50, 400,400), 0, i, true, paint);
//通知界面更新
surfaceHolder
.unlockCanvasAndPost(canvas);
}
};
}.start();

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  surface 线程 对象