surfaceView:
surface:表层,surfaceView表示的是表层的view对象,官方的文档解释为surfaceview
是在Window表面挖了个洞,surfaceview就显示在这个洞里,正常的view是显示在window上的。这几说明你可以在surfaceview纸上添加一些层(控件),类似Framelayout。
正常的view跟新和重绘需要调用view的invalidate方法吗,这个更新只能在UI线程中使用,surfaceview很好的地方就是允许其他线程绘制图形(使用canvas),根据这个特性,就可以控制绘制帧数,
surfaceview是一个view,有自己的生命周期,他需要另外一个线程去进行绘制操作,这个
线程在surfaceview中使用的是surfaceholder,surfaceholder需要在surfaceview初始化阶段开启自己的线程,surfaceholder保持一个surfaceview的引用,使用surfaceholder来操作surfaceview的生命周期,
下面代码就是自己的surfaceview,
package view;
import android.content.Context;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
* Created by songtao on 2016/11/30.
*/
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
public MySurfaceView(Context context) {
super(context);
initdata();
}
private void initdata() {
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
}
这个类中在surfaceview初始化的时候获得surfaceview中的surfaceholder对象,根据他设置
surfaceview的回调, surfaceCreated方法吗,当surfaceview被显示时调用,所以需要在这里面开启绘制线程,surfaceDestroyed方法销毁或隐藏surfaceview时调用的方法,这里可以关闭绘制的线程,