最近在写自绘控件,我自定义了一个SurfaceView,但是我界面比较复杂,不想在java代码里用setContentView来加载单一控件,所以写在了main.xml里,但是遇到的问题是SurfaceView里的绘制线程不初始化。求教高手们在复杂界面上应该如何解决这问题。

解决方案 »

  1.   

    你的SurfaceView的线程在哪里启动的?这个线程是什么意思,是指另外一个转么用来绘制SurfaceView的线程吗?
      

  2.   

    这些线程是surfaceview里的用来绘制一些组件的线程,我surfaceview里面有3个线程,分别用来绘制进度条,可啦拽的进度块和显示时间,我调试发现好像构造函数没有被调用。
      

  3.   

    线程是在构造函数里初始化的,在surfacecreated里启动的
      

  4.   

    那就试一下:在set了main.xml后用findViewById方法将surfaceView对象在onCreat()方法里面引用出来,然后手动启动线程哈。反正是想让线程在构造函数启动,这样也不会有什么影响。
    如果你想需要的时候再启动就是用handler或者asyncTask处理上面的启动。
    我们用代码实现过,但是类似的例子接触过,你可以试一下。
      

  5.   

    好办法,看来surfacechanged不好用我就在外面手动启动吧,只能这样了
      

  6.   

    现在发现问题更严重点,将自定义surfaceview写在xml里之后,构造函数可以调用,但是SurfaceCreated没被调用,在就是surfaceview所在区域无效,用lockCanvas返回的是null,怪不得没调用线程run的时候surfaceview部分是黑屏的。可能是我surfaceview写的有问题。