5

我正在开发一个使用相机的应用程序。我做了这样的预览课:

public class MyPreview extends SurfaceView implements SurfaceHolder.Callback, Camera.Preview Callback{
    ...

    public void surfaceCreated(SurfaceHolder holder){
    ...
    mCamera.setPreviewCallback(this);
    ...
    }

    public void surfaceDestroyed(SurfaceHolder holder){
    ...
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){
    ...
    }

    public void onPreviewFrame(byte[] data, Camera camera){
    ...
    }
}

基本上,它是 CameraDemo 示例。Android CameraDemo 示例

问题是,surfaceCreated 只被调用一次(它应该的方式),但是 surfaceChanged 被不断地调用(而不是仅仅一次,或者当表面发生变化时),我相信这就是为什么永远不会调用 onPreviewFrame 的原因。摄像头画面显示在屏幕上,看起来工作正常,但实际上并非如此。

有趣的是它在 Android 2.x 上运行良好,而问题只出现在 Android 4.1 上。(我没有在其他设备上测试过)

我一直在环顾四周,我相信这可能是这个stackoverflow unsolved question和 this another stackoverflow unsolved question和 this code.google case背后的真正原因。最后一个案例有一个“解决方案”,但它对我不起作用。

那么,关于为什么一直输入 surfaceChanged 以及如何解决它的任何想法?

4

1 回答 1

-1

试试这些教程http://android-er.blogspot.ru/2010/12/implement-takepicture-function-of.html。还可以尝试查看周期的先前文章。

于 2013-08-27T08:01:43.597 回答