Android拍照Demo
16lz
2021-12-04
<?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. */@Overridepublic 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);}@Overridepublic 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(){@Overridepublic void onClick(View ic_camera_indicator_photo){mCamera.takePicture(shutter2, raw, jpegCallback);}};private OnClickListener finish1 = new OnClickListener(){@Overridepublic void onClick(View shezhi){TakePicture.super.openOptionsMenu();}};@Overridepublic 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;}@Overridepublic void surfaceCreated(SurfaceHolder holder){mCamera = Camera.open();}@Overridepublic 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(){@Overridepublic void onClick(DialogInterface arg0, int arg1){savepicture(data);}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic 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);}}
更多相关文章
- Android手机号、串号获取
- android Wifi自动连接
- android Wifi自动连接
- android照相及照片上传
- Android(安卓)SharePreference 使用 储存
- Android(安卓)封装SharedPreference工具类
- Android之使用摄像头拍照
- android am命令
- android webkit学习笔记1---url的load过程