安卓拍照程序4.4可用

来源:互联网 发布:淘宝网壹号人家 编辑:程序博客网 时间:2024/05/22 03:14

MainActivity.java主界面

package com.example.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.hardware.Camera.ShutterCallback;import android.os.Bundle;import android.os.Environment;import android.util.DisplayMetrics;import android.view.Display;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.EditText;import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private SurfaceView sView;private SurfaceHolder surfaceHolder;private int screenWidth,screenHeight;private Camera camera;private boolean isPreview=false;@Overrideprotected 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.activity_main);//获取窗口管理器WindowManager wm=getWindowManager();Display display=wm.getDefaultDisplay();DisplayMetrics metrics=new DisplayMetrics();//获取屏幕的宽和高display.getMetrics(metrics);screenWidth=metrics.widthPixels;screenHeight=metrics.heightPixels;//获取界面中的SurfaceView组件sView=(SurfaceView) findViewById(R.id.sView);/*//设置该Surface不需要自己维护缓冲区sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);*///获得SurfaceView的SurfaceHoldersurfaceHolder=sView.getHolder();surfaceHolder.addCallback(new Callback() {public void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubif(camera!=null){if(isPreview) camera.stopPreview();camera.release();camera=null;}}public void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubinitCamera();}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}});}private void initCamera() {if(!isPreview){//此处默认打开后置摄像头//通过传入参数可以打开前置摄像头camera=Camera.open(0);//1camera.setDisplayOrientation(90);}if(camera!=null&&!isPreview){try {Camera.Parameters parameters=camera.getParameters();//设置预览图片的大小parameters.setPreviewSize(screenWidth, screenHeight);//设置预览照片时每秒显示多少帧的最小值和最大值parameters.setPreviewFpsRange(4, 10);//设置图片格式parameters.setPictureFormat(ImageFormat.JPEG);//设置JPG图片的质量parameters.set("jpeg-quality", 85);//通过SurfaceView显示取景画面camera.setPreviewDisplay(surfaceHolder);//开始预览camera.startPreview();} catch (Exception e) {// TODO: handle exception}isPreview=true;}}public void capture(View source){if(camera!=null){camera.autoFocus(autoFocusCallback);}}AutoFocusCallback autoFocusCallback=new AutoFocusCallback() {//对焦时激发该方法@Overridepublic void onAutoFocus(boolean success, Camera camera) {if(success){camera.takePicture(new ShutterCallback() {@Overridepublic void onShutter() {// TODO Auto-generated method stub//按下快门执行此处代码}}, new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stub//此处决定是否需要保存原始照片信息}}, myJpegCallback);}}};PictureCallback myJpegCallback=new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stub//根据拍照所得的数据创建位图final Bitmap bmBitmap=BitmapFactory.decodeByteArray(data, 0, data.length);//加载/layout/save.xml文件对应的布局资源View saveDialogView=getLayoutInflater().inflate(R.layout.save, null);final EditText photoName=(EditText)saveDialogView.findViewById(R.id.phone_name);//获取saveDialog对话框上的ImageView组件ImageView showImageView=(ImageView)saveDialogView.findViewById(R.id.show);//显示刚刚拍得的照片showImageView.setImageBitmap(bmBitmap);new AlertDialog.Builder(MainActivity.this).setView(saveDialogView).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub// 创建一个位于SD卡上的文件File file = new File(Environment.getExternalStorageDirectory(), photoName.getText().toString() + ".jpg");FileOutputStream outStream = null;try{// 打开指定文件对应的输出流outStream = new FileOutputStream(file);// 把位图输出到指定文件中bmBitmap.compress(CompressFormat.JPEG, 100,outStream);outStream.close();}catch (IOException e){e.printStackTrace();}}} ).setNegativeButton("取消", null).show();camera.stopPreview();camera.startPreview();isPreview=true;}};@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent=new Intent();}}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    ><SurfaceViewandroid:id="@+id/sView"android:layout_width="match_parent" android:layout_height="match_parent"/><ImageButtonandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:onClick="capture" android:src="@drawable/capture"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"    /></RelativeLayout>

save.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="8dip"android:text="@string/photo_name" /><!-- 定义一个文本框来让用户输入照片名 --><EditTextandroid:id="@+id/phone_name"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout><!-- 定义一个图片框来显示照片 --> <ImageViewandroid:id="@+id/show"android:layout_width="240px"android:layout_height="315px"android:scaleType="fitCenter"android:layout_marginTop="10dp"/></LinearLayout>

最后不要忘了加权限

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.test"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="19"        android:targetSdkVersion="21" />    <uses-permission android:name="android.permission.CAMERA"/>    <uses-feature        android:name="android.hardware.camera" />    <uses-feature         android:name="android.hardware.camera.autofocus"        />    <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>  <uses-permission android:name = "android.permission.INTERNET"/>    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/title_activity_main" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>



0 0
原创粉丝点击