国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)拍照功能

2019-10-22 18:10:23
字體:
供稿:網(wǎng)友

大家好,這是一個簡單的拍照功能,很簡單的界面,一個顯示圖像區(qū)域SurfaceView一個“拍照”按鈕。直接上代碼!

1、CameraDemoActivity.java(主界面)

package org.winplus.camera;  import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date;  import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; import android.hardware.Camera; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.text.format.DateFormat; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button;  public class CameraDemoActivity extends Activity{   private final static String TAG = "CameraActivity";  private SurfaceView surfaceView;  private SurfaceHolder surfaceHolder;  private Camera camera;  private File picture;  private Button btnSave;    @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);   this.requestWindowFeature(Window.FEATURE_NO_TITLE);   setContentView(R.layout.main);   setupViews();  }    private void setupViews(){   surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // Camera interface to instantiate components   surfaceHolder = surfaceView.getHolder(); // Camera interface to instantiate components   surfaceHolder.addCallback(surfaceCallback); // Add a callback for the SurfaceHolder   surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      btnSave = (Button) findViewById(R.id.save_pic);      btnSave.setOnClickListener(new OnClickListener() {        @Override    public void onClick(View v) {     takePic();    }   });  }      @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();// stop the preview    camera.takePicture(null, null, pictureCallback); // picture  }   // Photo call back  Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {   //@Override   public void onPictureTaken(byte[] data, Camera camera) {    new SavePictureTask().execute(data);    camera.startPreview();   }  };   // save pic  class SavePictureTask extends AsyncTask<byte[], String, String> {   @Override   protected String doInBackground(byte[]... params) {    String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg";        Log.i(TAG, "fname="+fname+";dir="+Environment.getExternalStorageDirectory());    //picture = new File(Environment.getExternalStorageDirectory(),fname);// create file        picture = new File(Environment.getExternalStorageDirectory()+"/"+fname);        try {     FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream     fos.write(params[0]); // Written to the file     fos.close();    } catch (Exception e) {     e.printStackTrace();    }    return null;   }  }   // SurfaceHodler Callback handle to open the camera, off camera and photo size changes  SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {    public void surfaceCreated(SurfaceHolder holder) {    Log.i(TAG, "surfaceCallback====");    camera = Camera.open(); // Turn on the camera    try {     camera.setPreviewDisplay(holder); // Set Preview    } catch (IOException e) {     camera.release();// release camera     camera = null;    }   }    public void surfaceChanged(SurfaceHolder holder, int format, int width,     int height) {    Log.i(TAG,"====surfaceChanged");    Camera.Parameters parameters = camera.getParameters(); // Camera parameters to obtain    parameters.setPictureFormat(PixelFormat.JPEG);// Setting Picture Format //   parameters.set("rotation", 180); // Arbitrary rotation    camera.setDisplayOrientation(0); //   parameters.setPreviewSize(400, 300); // Set Photo Size    camera.setParameters(parameters); // Setting camera parameters    camera.startPreview(); // Start Preview   }    public void surfaceDestroyed(SurfaceHolder holder) {    Log.i(TAG,"====surfaceDestroyed");    camera.stopPreview();// stop preview    camera.release(); // Release camera resources    camera = null;   }  }; } 

2、main.xml(布局文件)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical" >   <android.view.SurfaceView   android:id="@+id/camera_preview"   android:layout_width="800dip"   android:layout_height="600dip"   android:layout_alignParentTop="true"   android:layout_centerInParent="true"   android:layout_gravity="center_vertical|center_horizontal" />   <Button   android:id="@+id/save_pic"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="@string/txt_save" />  </LinearLayout> 

3、別忘了添加權(quán)限:

<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 

源碼下載:Android實現(xiàn)拍照功能

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安多县| 革吉县| 滁州市| 喀喇沁旗| 文成县| 阜平县| 福建省| 宜都市| 黑龙江省| 石泉县| 汪清县| 承德县| 花莲县| 托克逊县| 巴彦淖尔市| 宣化县| 泸州市| 全南县| 崇义县| 无极县| 申扎县| 曲周县| 陕西省| 措勤县| 英德市| 博白县| 赤水市| 大邑县| 龙岩市| 旬邑县| 鄂州市| 阳江市| 永宁县| 怀仁县| 涟源市| 北安市| 织金县| 蒙自县| 临城县| 邹城市| 内江市|