Android自定義相機(jī)

CustomCamera

android自定義相機(jī)

功能描述:

  1. 主要可自定義相機(jī)的各類(lèi)按鈕布局
  2. 相機(jī)拍照縮放功能
  3. 相機(jī)的寬高設(shè)置
  4. 前后攝像頭拍照設(shè)置

使用方法

一、添加依賴

Step 1. Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

dependencies {
        implementation 'com.github.jianjin33:CustomCamera:v1.0.3'
}

二炫加、清單文件中配置權(quán)限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />

三碳褒、初始化

可以在自定義Application或開(kāi)啟相機(jī)界面之前的適當(dāng)位置,添加一下初始化代碼:

CustomCameraAgent.init(this);

還可以配置一些屬性:

CustomCameraAgent.openLog(); 打開(kāi)日志
CustomCameraAgent.setCameraWidthAndHeight(); 設(shè)置相機(jī)預(yù)覽界面的寬高和照片的寬高
CustomCameraAgent.setPicFileName(); 設(shè)置自定義相機(jī)照片存儲(chǔ)路徑叠纷,默認(rèn)在photos文件夾下

四、Activity

  1. 布局文件中使用CameraContainer控件;
  2. onCreate方法中初始化CameraManager济舆,并綁定開(kāi)關(guān)燈View和切換前后攝像頭view,第三第四個(gè)參數(shù)為燈狀態(tài)和前后攝像頭時(shí)的文字提示莺债,可為null滋觉。
mCameraManager = CameraManager.getInstance(this);
mCameraManager.bindOptionMenuView(mCameraIvLight, mCameraTvSwitch, flashHint, null);
mCameraContainer.bindActivity(this);
  1. 當(dāng)相機(jī)不可見(jiàn)時(shí)签夭,及時(shí)釋放相機(jī)的資源及注銷(xiāo)一些傳感器的監(jiān)聽(tīng),調(diào)用CameraContainer.onStop(),恢復(fù)界面時(shí)調(diào)用CameraContainer.onStart();
@Override
protected void onResume() {
    super.onResume();
    if (mCameraContainer != null) {
        mCameraContainer.onStart();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if (mCameraContainer != null) {
        mCameraContainer.onStop();
    }
}
  1. 界面銷(xiāo)毀時(shí)釋放相機(jī)資源
@Override
protected void onDestroy() {
   super.onDestroy();
   mCameraManager.unbindView();
   if (mCameraContainer != null) {
       mCameraContainer.releaseCamera();
   }
}
  1. 拍照椎侠、切換攝像頭和開(kāi)關(guān)閃光燈等功能:

mCameraContainer.switchFlashMode(); 開(kāi)啟關(guān)閉閃光燈第租。這里注意只有當(dāng)光線較暗的情況下才會(huì)顯示開(kāi)燈按鈕;
mCameraContainer.switchCamera(); 切換前后相機(jī)
mCameraContainer.takePicture(ISavePicCallback); 拍照我纪,傳入存儲(chǔ)圖片完成后的回調(diào)接口ISavePicCallback

效果圖

效果圖

CustomCamera庫(kù)

image.png

不算復(fù)雜的類(lèi)庫(kù)慎宾,結(jié)構(gòu)如上圖,大致介紹一下各自功能宣羊,比較重要的類(lèi)有:

  • CameraCotainer:是個(gè)ViewGroup璧诵,包含相機(jī)預(yù)覽界面、相機(jī)焦點(diǎn)顯示隱藏及焦點(diǎn)位置控制仇冯,縮放相機(jī)預(yù)覽界面進(jìn)行縮放的操作和控制之宿;
  • CameraPreview:繼承SurfaceView,結(jié)合CameraManager控制相機(jī)的初始化苛坚,開(kāi)關(guān)燈比被,切換攝像頭等功能;
  • FocusImageView :相機(jī)焦點(diǎn)控件泼舱;
  • PreviewLightCallback:監(jiān)聽(tīng)光線是否昏暗等缀,控制是否顯示開(kāi)燈按鈕;
  • CustomCameraAgent:初始化庫(kù)使用娇昙;
  • SavePicHandler尺迂、UIHandler:存儲(chǔ)照片在子線程中進(jìn)行;
  • SensorController:加速傳感器冒掌,根據(jù)速度大小控制是否開(kāi)始鎖定焦點(diǎn)進(jìn)行相機(jī)變焦噪裕。
  1. 入口為CustomCameraAgent,進(jìn)行初始化股毫,配置Application和一些參數(shù)膳音。
  2. 相機(jī)界面會(huì)用到CameraContainer控件,是一個(gè)FrameLayout铃诬,主要是添加了一個(gè)CameraPreview控件祭陷,兩者都實(shí)現(xiàn)了ICameraOperation接口,(是一個(gè)操作相機(jī)的接口趣席,可以看成CameraContainer是CameraPreview一種代理模式兵志,最終的實(shí)現(xiàn)都在CameraPreview中完成,高層只會(huì)調(diào)用CameraContainer的方法)

Github CustomCamera

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣肚,一起剝皮案震驚了整個(gè)濱河市毒姨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钉寝,老刑警劉巖弧呐,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸迷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俘枫,警方通過(guò)查閱死者的電腦和手機(jī)腥沽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸠蚪,“玉大人今阳,你說(shuō)我怎么就攤上這事∶┬牛” “怎么了盾舌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蘸鲸。 經(jīng)常有香客問(wèn)我妖谴,道長(zhǎng),這世上最難降的妖魔是什么酌摇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任膝舅,我火速辦了婚禮,結(jié)果婚禮上窑多,老公的妹妹穿的比我還像新娘仍稀。我一直安慰自己,他們只是感情好埂息,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布技潘。 她就那樣靜靜地躺著,像睡著了一般千康。 火紅的嫁衣襯著肌膚如雪享幽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天吧秕,我揣著相機(jī)與錄音,去河邊找鬼迹炼。 笑死砸彬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斯入。 我是一名探鬼主播砂碉,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼刻两!你這毒婦竟也來(lái)了增蹭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磅摹,失蹤者是張志新(化名)和其女友劉穎滋迈,沒(méi)想到半個(gè)月后霎奢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饼灿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年幕侠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍彭。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晤硕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庇忌,到底是詐尸還是另有隱情舞箍,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布皆疹,位于F島的核電站疏橄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏墙基。R本人自食惡果不足惜软族,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望残制。 院中可真熱鬧立砸,春花似錦、人聲如沸初茶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恼布。三九已至螺戳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間折汞,已是汗流浹背倔幼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爽待,地道東北人损同。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸟款,于是被迫代替她去往敵國(guó)和親膏燃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容