我已经对surfaceview进行了子类化,并在活动的oncreate中将其实例化。预览被生成,但控件从不进入onDraw(),后者在surfaceView的子类中被重写。为什么会这样?

class ActivityClass extends Activity{

    onCreate(){

        mPreview = new Preview(this);
        setContentView(mPreview);
    }
    public void startPreview(){

        rec = new MediaRecorder();
        rec.setVideoSource();.......
        rec.setPreviewDisplay(mPreview.getSurfaceHolder.getSurface());
    }
}

class Preview extends SurfaceView implements SurfaceHolder.Callback{

    SurfaceHolder mHolder;

    public Preview(Context context){
        super(context);
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        bringToFront();//this is not
        invalidate();//making a difference
    }

    SurfaceHolder getSurfaceHolder(){

        return mHolder;
    }
    //Surface callback methods implemented here
}

在表面上绘制预览之前,如果实现了ondraw回调,难道不应该将该控件赋给它吗?
因为ondraw回调对android框架说“你不能绘制视图。我会画出来的,因为我已经实现了。我说的对吗?
为什么控件无法进入ondraw()?请帮忙。

最佳答案

你只要加上

setWillNotDraw(false)

给构造器。
完成了……)

10-04 16:57