0
對不起,我的英語。我有activity1
和activity2
。在activity1
我有按鈕,當我點擊這個按鈕時,這個按鈕會凍結幾秒鐘,然後打開activity2
。點擊activity1
中的按鈕時,要刪除凍結,我添加了啓動相機的代碼,新的runOnUiThread
,但現在不叫surfaceCreated
。在新的運行中在表面中添加攝像頭對象時,未調用surfaceCreatedOnUiThread
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();
}
}