要想使用surfaceview画出各种各样漂亮的界面,其实主要是对canvas的各种方法的灵活使用。这里并不深入讨论画图技巧,只说我在使用surfaceview中得出的一些经验。
1.为什么在活动的xml中增加surfaceview运行直接崩溃(没有调用surfaceCreated):
这个问题困扰了我很长时间,网上查了很多,有人说是没有addCallback,有人说是空间分配不合理,surfaceview太大什么的。我都试了,还是不行,最后发现是因 为以前我对活动的布局直接设置为surfaview实例,构造器重写的一个参数那个。但是要在布局文件中添加的话,就需要重写那个两个参数的方法:
public LuckyPan(Context context, AttributeSet attrs)
2.一些基本的初始化操作
private Paint paint;
private Bitmap background;
private Resources resources;
private SurfaceHolder holder;
private Canvas canvas;
private Thread thread;
private boolean isRunning = true;
public LuckyPan(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
background = BitmapFactory.decodeResource(getResources(),R.drawable.bg2);
//引用资源时经常用到
resources = getResources();
//画笔无锯齿
paint.setAntiAlias(true);
setFocusable(true);
setFocusableInTouchMode(true);
//用这个获取画布canvas
holder = getHolder();
//感知生命周期
holder.addCallback(this);
}
//在surfaceCreated中开线程,在surfaceDestroyed中关线程