我正在开发一款使用相机的应用。我已经制作了这样的预览课:
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 Example
问题是,surfaceCreated只被调用一次(它的方式),但是SurfaceChanged被不断调用(而不是只调用一次,或者当表面发生变化时),我相信这就是为什么onPreviewFrame永远不会被调用的原因。相机输入显示在屏幕上,似乎工作正常,但事实并非如此。
有趣的是它在Android 2.x上运行良好,问题只出现在Android 4.1上。 (我没有在其他设备上测试过它)
我一直在环顾四周,我相信这可能是这个stackoverflow unsolved question以及此another stackoverflow unsolved question和此code.google case背后的真正原因。最后一个案例有一个“解决方案”,但它对我不起作用。
那么,有关为什么一直在输入surfaceChanged的想法以及如何解决它?
答案 0 :(得分:-1)
试试这些教程http://android-er.blogspot.ru/2010/12/implement-takepicture-function-of.html。还可以尝试查看之前的文章。