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

首頁 > 學院 > 開發設計 > 正文

Material Design學習之 Camera

2019-11-09 14:47:37
字體:
來源:轉載
供稿:網友

轉載請注明出處:王亟亟的大牛之路

年后第一篇,自從來了某司產量驟減,這里批評下自己,這一篇的素材來源于老牌Material Design控件寫手afollestad的 https://github.com/afollestad/material-camera

開篇前,繼續安利,你懂的:https://github.com/ddwhan0123/Useful-Open-Source-Android (最近把 6.0授權部分單獨羅列出來了)


介紹代碼之前先貼下效果圖

這里寫圖片描述


如何使用

先是添加依賴讓maven去下代碼

maven部分

repositories { jcenter() maven { url "https://dl.bintray.com/drummer-aidan/maven" }}

然后在build.gradle里添加

compile 'com.afollestad:material-camera:0.4.4'

當然你要下源碼也行,就是一個java代碼和布局文件,截圖如下 這里寫圖片描述

依賴加好,代碼下好,還需要做一件事,注冊Activity

需要在項目的main文件里加

<activity android:name="com.afollestad.materialcamera.CaptureActivity" android:theme="@style/MaterialCamera.CaptureActivity" /><activity android:name="com.afollestad.materialcamera.CaptureActivity2" android:theme="@style/MaterialCamera.CaptureActivity" />

用于注冊library的activity

OK,配置大致就是如下


自定義設置

在使用拍攝功能前肯定,一定會有多多少少的設置,最通常的諸如,圖片儲存地址,圖片大小,畫質壓縮等等,原作者也提供了強大的api,這里做下翻譯

.allowRetry(true) //是否顯示重拍按鈕.autoSubmit(false) //是否允許用戶在錄制后播放視頻.saveDir(saveFolder) //拍攝的內容的儲存地址.PRimaryColorAttr(R.attr.colorPrimary) //相機配色,建議遵從app style.showPortraitWarning(true) //如果用戶按縱向方向的記錄,是否顯示警告.defaultToFrontFacing(false) //是否默認為前置攝像頭.allowChangeCamera(true) //允許用戶更改相機.retryExits(false) //如果為true,播放屏幕中的“重試”按鈕將退出相機,而不是返回錄音機.restartTimerOnRetry(false) //如果為true,則當用戶在播放中輕按“重試”時,倒計時器將重置為0.continueTimerInPlayback(false) //如果為true,倒計時器將在播放過程中繼續向下,而不是暫停。.videoEncodingBitRate(1024000) //設置視頻大小.audioEncodingBitRate(50000) // 設置音頻大小.videoFrameRate(24) //設置視頻fps值.qualityProfile(MaterialCamera.QUALITY_HIGH)//設置質量配置文件,手動設置比特率或幀速率與其他設置將覆蓋單個質量配置文件設置.videoPreferredHeight(720) //設置錄制視頻的首選高度.videoPreferredaspect(4f / 3f) //為錄制的視頻輸出設置首選寬高比 .maxAllowedFileSize(1024 * 1024 * 5) //將最大文件大小設置為5MB,如果文件達到此限制,錄制將停止。請記住,FAT文件系統的文件大小限制為4GB。.iconRecord(R.drawable.mcam_action_capture) //設置用于開始錄制的按鈕的自定義圖標.iconStop(R.drawable.mcam_action_stop) //為用于停止錄制的按鈕設置自定義圖標.iconFrontCamera(R.drawable.mcam_camera_front)//設置用于切換到前置攝像頭的按鈕的自定義圖標.iconRearCamera(R.drawable.mcam_camera_rear) //設置用于切換到后置攝像頭的按鈕的自定義圖標.iconPlay(R.drawable.evp_action_play) //設置用于開始播放的自定義圖標.iconPause(R.drawable.evp_action_pause) // 設置用于暫停播放的自定義圖標.iconRestart(R.drawable.evp_action_restart)//設置用于重新開始播放的自定義圖標.labelRetry(R.string.mcam_retry) //為用于重試記錄的按鈕設置自定義按鈕標簽(如果可用).labelConfirm(R.string.mcam_use_video) //為用于確認/提交錄音的按鈕設置自定義按鈕標簽.autoRecordWithDelaySec(5) //攝像機將在5秒倒計時后自動開始錄制。這將最初禁用前后攝像頭之間的切換。.autoRecordWithDelayMs(5000) //與上面相同,用毫秒而不是秒表示。.audioDisabled(false) //設置為true可記錄沒有任何音頻的視頻.start(CAMERA_RQ); //啟動相機活動,結果將被發回當前活動

這都是api提供的設置的方法,通俗易懂,建議寫成一個工廠方法然后調用,省得每次構造一個新的MaterialCamera對象


控件調用

作者在適配方面還是做的很用心的,高低版本的Fragment和通常的Activity都有做。兼容方面我分別在 華為,nexus,小米部分機型做過測試沒有明顯的差異和bug出現,我們來看下具體是如何調用的。

MaterialCamera materialCamera = new MaterialCamera(this) .saveDir(saveDir) .showPortraitWarning(true) .allowRetry(true) .defaultToFrontFacing(true) .allowRetry(true) .autoSubmit(false) .labelConfirm(R.string.mcam_use_video);materialCamera.stillShot() .labelConfirm(R.string.mcam_use_stillshot);materialCamera.start(CAMERA_RQ);

按鈕啊或者其他地方調用下就好了,然后和使用普通相機一樣在onActivityResult里找結果就行

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Received recording or error from MaterialCamera if (requestCode == CAMERA_RQ) { if (resultCode == RESULT_OK) { final File file = new File(data.getData().getPath()); Toast.makeText(this, String.format("Saved to: %s, size: %s", file.getAbsolutePath(), fileSize(file)), Toast.LENGTH_LONG).show(); } else if (data != null) { Exception e = (Exception) data.getSerializableExtra(MaterialCamera.ERROR_EXTRA); if (e != null) { e.printStackTrace(); Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } } }

首先判斷是否是自己之前預設的requestCode值是的話去讀取data里面的值 只要能讀到data值那就走正常的業務邏輯就好。 整體使用體驗和廠商自帶的相機相機功能沒有什么區別。

區別在于存儲部分幫你做了,常用功能幫你封了,長得很MD,還有很強的拓展性


一些補充

1.暫時只支持android.support.v4.app.Fragment android.app.Fragment Activity調用相機,特殊場景的話自己得轉Context

2.manifest里面加的2個Activity節點不能漏,lib褲自己沒有存貨的進程,都依附于調用者(我沒試過不加會怎么樣,八成是找不到那個類) 那為什么需要有2個呢? 兼容看看2個類的注解就知道了

@TargetApi(Build.VERSION_CODES.LOLLipOP)public class Camera2Fragment extends BaseCameraFragment implements View.OnClickListener

以及

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public class CameraFragment extends BaseCameraFragment implements View.OnClickListener

這個庫暫時就介紹到這里,這篇沒去拆源碼,我對這個庫的理解感覺 這是一個實用性大于教學性的開源庫,類似功能的庫實現都是大同小異 都是對自帶的照相機外面套了層ui,套了層功能強化,當然感興趣可以自己去讀讀,不是很難。

如果覺得部分功能自己需要拓展,繼承BaseCameraFragment 這部分開始自己實現我覺得也很方便。

項目地址:https://github.com/afollestad/material-camera


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥德县| 牟定县| 基隆市| 莲花县| 当阳市| 边坝县| 孝感市| 改则县| 秦皇岛市| 遂昌县| 永州市| 台东县| 花莲市| 太白县| 三穗县| 咸丰县| 四平市| 朝阳区| 虞城县| 定结县| 湖北省| 益阳市| 嘉荫县| 富宁县| 巨鹿县| 东宁县| 柳林县| 新沂市| 天峨县| 博乐市| 黑河市| 韩城市| 象州县| 呼和浩特市| 侯马市| 镇坪县| 宝山区| 张掖市| 洞头县| 吉林市| 尖扎县|