您的位置:首页 > 其它

拍照

2016-03-12 09:19 615 查看
横向,全屏,摄像头权限

<activity android:name=".MainActivity"

                  android:label="@string/app_name" android:screenOrientation="landscape">

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);

<uses-permission android:name="android.permission.CAMERA"/>

使用了surfaceview控件,

.Camera.takePicture(ShutterCallback shutter,
PictureCallback raw,
PictureCallback jpeg)

该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动

public class MainActivity extends Activity {
private View layout;
private Camera camera;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);

layout = this.findViewById(R.id.buttonlayout);

SurfaceView surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}

public void takepicture(View v){
if(camera!=null){
switch (v.getId()) {
case R.id.takepicture:
camera.takePicture(null, null, new MyPictureCallback());
break;

case R.id.autofocus:
camera.autoFocus(null);
break;
}
}
}

.Camera.takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)

该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动

 
private final class MyPictureCallback implements PictureCallback{
public void onPictureTaken(byte[] data, Camera camera) {
try {
File jpgFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");
FileOutputStream outStream = new FileOutputStream(jpgFile);
outStream.write(data);
outStream.close();
camera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}

}


    

   
private final class SurfaceCallback implements Callback{
public void surfaceCreated(SurfaceHolder holder) {
try{
camera = Camera.open();//打开摄像头
Camera.Parameters parameters = camera.getParameters();
//Log.i("MainActivity", parameters.flatten());
parameters.setPreviewSize(800, 480);
parameters.setPreviewFrameRate(5);
parameters.setPictureSize(1024,768);
parameters.setJpegQuality(80);
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();//开始预览
}catch (Exception e) {
e.printStackTrace();
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
}

public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
camera.release();
camera = null;
}
}

}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
layout.setVisibility(ViewGroup.VISIBLE);
return true;
}
return super.onTouchEvent(event);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: