android 拍照+拍照button 以及返回按鈕布局

來源:互聯網
上載者:User

標籤:des   android   style   class   blog   code   

公司最近做一個項目拍照總是崩潰,所以決定自己寫一個拍照的方法,在網上調研一番,寫了一個簡單demo,現共用如下

主要CameraActivity

CameraActivity

package com.wondertek.video.camera;import java.io.FileOutputStream;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.Button;import android.widget.FrameLayout;import com.wondertek.xsgj.R;/** *  * @Description:TODO 拍照最佳化 * @author:skyCc * @time:2014-6-6 下午5:03:10 */public class CameraActivity extends Activity {    public static final int CAMERA_RESULT = 1234;    public static final int REQUEST_PICKER_ALBUM = 2345;    private static String TAG = "CameraObserver";    public static String photopath = "";    Button buttonExit;    Button buttonCapture;    private Camera mCamera;    private CameraViewNew mPreview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // CameraObserver已經將photopath路徑傳過來了        Log.d(TAG, "CameraActivity onCreate photopath = " + photopath);        getWindow().clearFlags(                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.capture_activity);        mCamera = getCameraInstance();        // 建立預覽類,並與Camera關聯,最後添加到介面布局中        mPreview = new CameraViewNew(this, mCamera);        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);        preview.addView(mPreview);        // requestWindowFeature(Window.FEATURE_NO_TITLE);// 設定橫屏模式以及全螢幕模式        // setContentView(new CameraView(this,photopath)); //設定View        buttonCapture = (Button) findViewById(R.id.button_capture);        buttonCapture.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                mCamera.autoFocus(new AutoFocusCallback() {                    @Override                    public void onAutoFocus(boolean success, Camera camera) {                        // TODO Auto-generated method stub                        mCamera.takePicture(null, null, myPicture);                    }                });            }        });        buttonExit=(Button) findViewById(R.id.button_exit);        buttonExit.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                finish();            }        });    }    /** 開啟一個Camera */    public static Camera getCameraInstance() {        Camera c = null;        try {            c = Camera.open();        } catch (Exception e) {            Log.d(TAG, "開啟Camera失敗失敗");        }        return c;    }    private PictureCallback myPicture = new PictureCallback() {        @Override        public void onPictureTaken(byte[] data, Camera camera) {            // TODO Auto-generated method stub            Log.d(TAG, " onPictureTaken = " + photopath);            try {                if (photopath.length() > 0)                    data2file(data, photopath);            } catch (Exception e) {            }            camera.stopPreview();        }        private void data2file(byte[] w, String fileName) throws Exception {// 將位元據轉換為檔案的函數            FileOutputStream out = null;            try {                out = new FileOutputStream(fileName);                out.write(w);                out.close();            } catch (Exception e) {                if (out != null)                    out.close();                throw e;            }        }    };}

CameraViewNew

package com.wondertek.video.camera;import java.io.IOException;import org.jivesoftware.smack.sasl.SASLMechanism.Success;import android.content.Context;import android.hardware.Camera;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;/** * @Description:TODO重新布局拍照的介面 * @author:skyCc * @time:2014-6-5 下午11:33:11 */public class CameraViewNew extends SurfaceView implements Callback{private final static String TAG="CameraView";private Camera mCamera;private SurfaceHolder mHolder;    public CameraViewNew(Context context,Camera camera) {        super(context);        mCamera=camera;        mHolder=getHolder();        mHolder.addCallback(this);        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        // TODO Auto-generated constructor stub    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {        // TODO Auto-generated method stub        if(mHolder.getSurface()==null){            return ;        }        mCamera.stopPreview();        try {            mCamera.setPreviewDisplay(holder);            mCamera.startPreview();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        // TODO Auto-generated method stub        try {            mCamera.setPreviewDisplay(holder);            mCamera.startPreview();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        // TODO Auto-generated method stub        mCamera.setPreviewCallback(null);        mCamera.stopPreview();        mCamera.release();        mCamera =null;    }}

capture_activity.xm

<?xml version="1.0" encoding="utf-8"?> <LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="horizontal"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     >    <FrameLayout     android:id="@+id/camera_preview"     android:layout_width="fill_parent"    android:layout_height="fill_parent"   android:layout_weight="1"     />   <Button    android:id="@+id/button_capture"     android:text="拍照"    android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:layout_gravity="center"    />   <Button           android:text="返回"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:id="@+id/button_exit"         android:layout_gravity="center"     />   </LinearLayout>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.