<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.entel.research" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TakePicture" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:screenOrientation="landscape" android:clearTaskOnLaunch="true" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.CAMERA"/> <uses-sdk android:minSdkVersion="3" /> </manifest>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/camera" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <SurfaceView android:id="@+id/surface_camera" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" android:screenOrientation="landscape" > </SurfaceView> <ImageButton android:id="@+id/shutter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="5dip" android:layout_marginTop="5dip" android:clickable="true" android:focusable="true" android:src="@drawable/ic_camera_indicator_photo" > </ImageButton> <ImageButton android:id="@+id/finish" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="5dip" android:layout_marginRight="5dip" android:scaleType="center" android:src="@drawable/shezhi" > </ImageButton> </RelativeLayout>
package com.entel.research; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PixelFormat; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; import android.widget.Toast; public class TakePicture extends Activity implements SurfaceHolder.Callback { private Camera mCamera; private boolean mPreviewRunning = true; public static final int ITEM0 = Menu.FIRST; public static final int ITEM1 = Menu.FIRST + 1; public static final int ITEM2 = Menu.FIRST + 2; byte[] data; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.com_camera1_main); SurfaceView mSurfaceView; ImageButton shutter; ImageButton finish; mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); shutter = (ImageButton) findViewById(R.id.shutter); finish = (ImageButton) findViewById(R.id.finish); shutter.setOnClickListener(shutter1); finish.setOnClickListener(finish1); SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, ITEM0, 0, "摄像"); menu.add(0, ITEM1, 1, "设置"); menu.add(0, ITEM2, 2, "退出"); menu.findItem(ITEM1); return true; } private OnClickListener shutter1 = new OnClickListener() { @Override public void onClick(View ic_camera_indicator_photo) { mCamera.takePicture(shutter2, raw, jpegCallback); } }; private OnClickListener finish1 = new OnClickListener() { @Override public void onClick(View shezhi) { TakePicture.super.openOptionsMenu(); } }; @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(w, h); p.set("rotation", 90); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mPreviewRunning = false; mCamera.release(); } Camera.PictureCallback raw = new Camera.PictureCallback() { public void onPictureTaken(byte[] imageData, Camera c) { } }; private PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] _data, Camera _camera) { /* onPictureTaken传入的第一个参数即为相片的byte */ data = _data; showDialog(1); } }; Camera.ShutterCallback shutter2 = new Camera.ShutterCallback() { public void onShutter() { } }; private Dialog buildDialog(Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("是否储存照片"); builder.setPositiveButton("存储", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { savepicture(data); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mCamera.startPreview(); } }); return builder.create(); }; public Dialog onCreateDialog(int i) { switch (i) { case 1: return buildDialog(TakePicture.this); } return null; }; public void savepicture(byte[] _data) { Bitmap bm = BitmapFactory.decodeByteArray(_data, 0, _data.length); /* 创建新文件 */ File myCaptureFile = new File("/sdcard/" + System.currentTimeMillis() + ".jpg"); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); /* 采用压缩转档方法 */ bos.flush(); bos.close(); Thread.sleep(3000); mCamera.startPreview(); } catch (Exception e) { Log.e("camera", e.getMessage()); } Toast.makeText(TakePicture.this, "照片存储路径:" + "/sdcard/" + System.currentTimeMillis() + ".jpg", Toast.LENGTH_LONG).show(); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case ITEM0: break; case ITEM1: break; case ITEM2: System.exit(0); break; } return super.onOptionsItemSelected(item); } }