【发布时间】:2016-04-21 11:34:10
【问题描述】:
对不起我的英语。我有activity1 和activity2。在activity1 我有按钮,当我单击此按钮时,此按钮会冻结几秒钟,然后打开activity2。为了在单击activity1 中的按钮时消除冻结,我添加了在新runOnUiThread 中启动相机但现在不称为surfaceCreated 的代码。
mPreview - 我的自定义surfaceView
mCamera - 物体相机
我的代码:
new Thread(new Runnable() {
@Override
public void run() {
CameraActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mPreview.addCamera(mCamera);
mPreview.addParent(CameraActivity.this);
mCamera.getParameters().setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
mPreview.refreshDrawableState();
mCamera.startPreview();
}
});
}
}).start();
我的客户SurfaceView(我只添加重要代码)
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
public CameraPreview (Context context){
super(context);
}
public CameraPreview(Context context, AttributeSet attrs){
super(context, attrs);
}
public CameraPreview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void addCamera(Camera camera){
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
try {
if(mCamera!=null){
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
} catch (Exception e){
Toast.makeText(this.getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
//code
mCamera.startPreview();
}
}
【问题讨论】:
标签: android android-camera surfaceview