天天看點

做自己的安卓拍照應用,其實很簡單

看着自己手機上的自帶的拍照APP,感覺人家做的好精美啊,是以就心血來潮的想要做一個自己的安卓拍照app。于是在網上找啊找啊找的終于做出了一款還算能用的拍照裝置。 (*^__^*) 嘻嘻……

我主要是借助于SurfaceView類來實作元件的添加的;

然後借助于Camera(導入包的時候記得是引入hardware的);

設定拍照所需的一些參數

實作拍照的回調接口,用以處理回調事件

将攝像頭采集到的資料寫入本地的檔案中

在清單檔案中添加錄影機權限,寫外部存儲卡權限

首先是布局檔案,這裡因為要顯示兩個按鈕,是以采用了幀布局,并将兩個按鈕一開始設定為不顯示。

然後是清單檔案的一些樣式(橫屏和全屏顯示)以及相關的權限的添加

最後是主界面的業務代碼的實作:

現在回頭來整理一下這個小應用的思路,友善對這些知識點加深印象。

首先是對布局界面的設計的整理:

因為要通過點選按鈕的方式來實作拍照和聚焦的效果,還得顯示我們的照相機所捕捉到的實時資料,是以我采用了幀布局的形式,讓兩個按鈕顯示在SurfaceView的上層,并初始化為不可見的狀态。

而實時的界面采用全屏和橫屏的方式更為妥當,是以加入下面的代碼即可,我這裡的全屏帶代碼中進行設定了。

然後是清單檔案的書寫:

由于要操作照相機和拍照的圖檔資料,是以要在清單檔案中添加相關的權限。

主界面的代碼邏輯:

然後是我們的主界面的代碼的邏輯了,在Activity初始化的時候就需要擷取SurfaceView控件,然後設定一些參數,比如螢幕常亮,實時無緩沖等,然後添加回調的處理。這裡是為了初始化我們的照相機的一些參數,比如設定每秒捕獲的圖檔的幀數,每張圖檔的大小等等吧。這些都是在SurfaceCreated方法内完成的,也就是那個回調的實作類中完成的。等待着事件傳回結果就可以了。最後記得要關閉camera的執行個體哦,否則其他應用可能就調用不了照相機,進行工作了。

完成了初始化的任務後,我們的界面就算是完成了,現在我們要拍照咯,那必須得按下快門吧,快門就是我們設定好的按鈕呗,是以點選螢幕會觸發onTouchEvent事件,在這個方法裡面我們就設定這兩個按鈕顯示就可以了。左邊的是聚焦,右邊的是拍照。現在隻需要對這兩個方法進行實作,就大功告成了。

是以現在就是調用camera的<code>camera.takePicture(null, null, new MyPictureCallback());</code>方法了,前兩個是關于壓縮,格式等相關,可以設定為null,第三個就是拍照時的一個回調了。其作用就是将照相機捕獲到的資料封裝起來了,<code>public void onPictureTaken(byte[] data, Camera camera) {</code>這裡面的data就是照相機捕獲到的圖檔的位元組數組了,我們接下來要做的就是使用一個輸出流,将檔案寫入到一個格式為<code>.jpeg</code> 的圖檔中,就可以了。

以上就是這個應用的整個的實作的流程和思路。希望對大家能有所幫助。

最後,來個小小的總結和拓展吧。

總結

簡易的實作了拍照應用。使用了多個開發過程中常用的知識點和小技巧。

但是代碼顯得很是混亂,沒有分層。應該将不同的業務邏輯實作放到不同的包内,友善代碼的管理。

拓展

作為拓展,是我們可以借助這樣的代碼實作更加美化的效果,比如說添加上一個預覽路徑,便于檢視所拍攝的圖檔。或者一個攝像的模式,這需要借助于額外的類進行處理。添加上二維碼掃描功能等等。

手機型号:魅藍2

繼續閱讀