java dispo lock_一些问题解决

publicclassCameraActivityextendsActivity{

// private PreView preView = null;

//

// @Override

// protected void onCreate(Bundle savedInstanceState) {

// super.onCreate(savedInstanceState);

// this.requestWindowFeature(Window.FEATURE_NO_TITLE);

// preView = new PreView(this);

// setContentView(preView,new LayoutParams(400, 300));

// }

//

// @Override

// public boolean onKeyDown(int keyCode, KeyEvent event) {

// return preView.onKeyDown(keyCode, event);

// }

privatefinalstaticString TAG ="CameraActivity";

privateSurfaceView surfaceView;

privateSurfaceHolder surfaceHolder;

privateCamera camera;

privateFile picture;

privateButton btnFinish;

privateDialog mDialog;

privateResources res;

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.camera);

setupViews();

}

privatevoidsetupViews(){

surfaceView = (SurfaceView) findViewById(R.id.camera_preview);// 实例化拍照界面组件

surfaceHolder = surfaceView.getHolder();// 实例化拍照界面组件

surfaceHolder.addCallback(surfaceCallback);// 为SurfaceHolder 添加回调

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

res = getResources();

btnFinish =(Button) findViewById(R.id.camera_finish);

btnFinish.setOnClickListener(newOnClickListener() {

//@Override

publicvoidonClick(View v) {

// 提示是否看到预览

if(mDialog ==null){

mDialog =newAlertDialog.Builder(CameraActivity.this).setIcon(

R.drawable.icon).setTitle(res.getString(R.string.camera_title))

.setMessage(res.getString(R.string.camera_msg)).setPositiveButton(

res.getString(R.string.yes), dialogClick)

.setNegativeButton(res.getString(R.string.no), dialogClick).create();

mDialog.show();}

}

});

}

privateandroid.content.DialogInterface.OnClickListener dialogClick =newandroid.content.DialogInterface.OnClickListener() {

// @Override

publicvoidonClick(DialogInterface dialog,intwhich) {

switch(which) {

caseDialogInterface.BUTTON_POSITIVE:

resultRquest(true);

break;

caseDialogInterface.BUTTON_NEGATIVE:

resultRquest(false);

break;

default:

break;

}

}

};

privatevoidresultRquest(booleanflag){

Intent intent =newIntent(CameraActivity.this, MainActivity.class);

intent.putExtra(CAMERA_RESULT, flag);

setResult(REQUESTCODE_CAMERA_RESULT, intent);

finish();

}

@Override

publicbooleanonKeyDown(intkeyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_CAMERA

|| keyCode == KeyEvent.KEYCODE_SEARCH) {

takePic();

returntrue;

}

returnsuper.onKeyDown(keyCode, event);

}

privatevoidtakePic() {

camera.stopPreview();// 停止预览

camera.takePicture(null,null, pictureCallback);// 拍照

}

// 照片回调

Camera.PictureCallback pictureCallback =newCamera.PictureCallback() {

//@Override

publicvoidonPictureTaken(byte[] data, Camera camera) {

newSavePictureTask().execute(data);

camera.startPreview();

}

};

// 保存照片任务类

classSavePictureTaskextendsAsyncTask {

@Override

protectedString doInBackground(byte[]... params) {

picture =newFile(Environment.getExternalStorageDirectory(),

"picture.jpg");// 创建文件

if(picture.exists())

picture.delete();// 如果文件存在删除掉

try{

FileOutputStream fos =newFileOutputStream(picture.getPath());// 获得文件输出流

fos.write(params[0]);// 写到该文件

fos.close();// 关闭文件流

}catch(Exception e) {

e.printStackTrace();

}

returnnull;

}

}

// SurfaceHodler 回调,处理打开相机,关闭相机以及照片尺寸的改变

SurfaceHolder.Callback surfaceCallback =newSurfaceHolder.Callback() {

//@Override

publicvoidsurfaceCreated(SurfaceHolder holder) {

camera = Camera.open();// 打开相机

try{

camera.setPreviewDisplay(holder);// 设置预览

}catch(IOException e) {

camera.release();// 释放

camera =null;

}

}

//@Override

publicvoidsurfaceChanged(SurfaceHolder holder,intformat,intwidth,

intheight) {

Camera.Parameters parameters = camera.getParameters();// 获得相机参数

parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片格式

parameters.setPreviewSize(400,300);// 设置照片大小

camera.setParameters(parameters);// 设置相机参数

camera.startPreview();// 开始预览

}

//@Override

publicvoidsurfaceDestroyed(SurfaceHolder holder) {

Log.i(TAG,"====surfaceDestroyed");

camera.stopPreview();// 停止预览

camera.release();// 释放相机资源

camera =null;

}

};

}

public class CameraActivity extends Activity{

// private PreView preView = null;

//

// @Override

// protected void onCreate(Bundle savedInstanceState) {

// super.onCreate(savedInstanceState);

// this.requestWindowFeature(Window.FEATURE_NO_TITLE);

// preView = new PreView(this);

// setContentView(preView,new LayoutParams(400, 300));

// }

//

// @Override

// public boolean onKeyDown(int keyCode, KeyEvent event) {

// return preView.onKeyDown(keyCode, event);

// }

private final static String TAG = "CameraActivity";

private SurfaceView surfaceView;

private SurfaceHolder surfaceHolder;

private Camera camera;

private File picture;

private Button btnFinish;

private Dialog mDialog;

private Resources res;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.camera);

setupViews();

}

private void setupViews(){

surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // 实例化拍照界面组件

surfaceHolder = surfaceView.getHolder(); // 实例化拍照界面组件

surfaceHolder.addCallback(surfaceCallback); // 为SurfaceHolder 添加回调

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

res = getResources();

btnFinish =(Button) findViewById(R.id.camera_finish);

btnFinish.setOnClickListener(new OnClickListener() {

//@Override

public void onClick(View v) {

// 提示是否看到预览

if(mDialog == null){

mDialog = new AlertDialog.Builder(CameraActivity.this).setIcon(

R.drawable.icon).setTitle(res.getString(R.string.camera_title))

.setMessage(res.getString(R.string.camera_msg)).setPositiveButton(

res.getString(R.string.yes), dialogClick)

.setNegativeButton(res.getString(R.string.no), dialogClick).create();

mDialog.show();}

}

});

}

private android.content.DialogInterface.OnClickListener dialogClick = new android.content.DialogInterface.OnClickListener() {

// @Override

public void onClick(DialogInterface dialog, int which) {

switch (which) {

case DialogInterface.BUTTON_POSITIVE:

resultRquest(true);

break;

case DialogInterface.BUTTON_NEGATIVE:

resultRquest(false);

break;

default:

break;

}

}

};

private void resultRquest(boolean flag){

Intent intent = new Intent(CameraActivity.this, MainActivity.class);

intent.putExtra(CAMERA_RESULT, flag);

setResult(REQUESTCODE_CAMERA_RESULT, intent);

finish();

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_CAMERA

|| keyCode == KeyEvent.KEYCODE_SEARCH) {

takePic();

return true;

}

return super.onKeyDown(keyCode, event);

}

private void takePic() {

camera.stopPreview();// 停止预览

camera.takePicture(null, null, pictureCallback); // 拍照

}

// 照片回调

Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {

//@Override

public void onPictureTaken(byte[] data, Camera camera) {

new SavePictureTask().execute(data);

camera.startPreview();

}

};

// 保存照片任务类

class SavePictureTask extends AsyncTask {

@Override

protected String doInBackground(byte[]... params) {

picture = new File(Environment.getExternalStorageDirectory(),

"picture.jpg");// 创建文件

if (picture.exists())

picture.delete(); // 如果文件存在删除掉

try {

FileOutputStream fos = new FileOutputStream(picture.getPath()); // 获得文件输出流

fos.write(params[0]); // 写到该文件

fos.close(); // 关闭文件流

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

// SurfaceHodler 回调,处理打开相机,关闭相机以及照片尺寸的改变

SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {

//@Override

public void surfaceCreated(SurfaceHolder holder) {

camera = Camera.open(); // 打开相机

try {

camera.setPreviewDisplay(holder); // 设置预览

} catch (IOException e) {

camera.release();// 释放

camera = null;

}

}

//@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

Camera.Parameters parameters = camera.getParameters(); // 获得相机参数

parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片格式

parameters.setPreviewSize(400, 300); // 设置照片大小

camera.setParameters(parameters); // 设置相机参数

camera.startPreview(); // 开始预览

}

//@Override

public void surfaceDestroyed(SurfaceHolder holder) {

Log.i(TAG,"====surfaceDestroyed");

camera.stopPreview();// 停止预览

camera.release(); // 释放相机资源

camera = null;

}

};

}

9、按键(只要重写dispoatchKeyEvent即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值