├── app ├── .gitignore ├── debug │ ├── app-debug.apk │ └── output.json ├── release │ ├── app-release.apk │ └── output.json ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── xml │ │ │ │ └── file_paths.xml │ │ │ ├── layout │ │ │ │ ├── welcome_activity.xml │ │ │ │ └── activity_main.xml │ │ │ ├── values-v28 │ │ │ │ └── styles.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── hbzhou │ │ │ │ └── open │ │ │ │ └── camera │ │ │ │ ├── MyApplication.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ └── WelcomeActivity.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── hbzhou │ │ │ └── open │ │ │ └── camera │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── hbzhou │ │ └── open │ │ └── camera │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── flowcamera ├── consumer-rules.pro ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ └── attrs.xml │ │ │ ├── drawable │ │ │ │ ├── ic_flash_on.xml │ │ │ │ ├── ic_flash_off.xml │ │ │ │ ├── ic_flash_auto.xml │ │ │ │ ├── ic_photo.xml │ │ │ │ └── ic_camera.xml │ │ │ └── layout │ │ │ │ ├── camera_view.xml │ │ │ │ ├── flow_camera_view.xml │ │ │ │ ├── flow_camera_view2.xml │ │ │ │ ├── flow_camera_view3.xml │ │ │ │ └── custom_camera_view.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── hbzhou │ │ │ │ └── open │ │ │ │ └── flowcamera │ │ │ │ ├── listener │ │ │ │ ├── ClickListener.java │ │ │ │ ├── ResultListener.java │ │ │ │ ├── ReturnListener.java │ │ │ │ ├── OnVideoPlayPrepareListener.kt │ │ │ │ ├── TypeListener.java │ │ │ │ ├── ErrorListener.java │ │ │ │ ├── JCameraListener.java │ │ │ │ ├── CaptureListener.java │ │ │ │ └── FlowCameraListener.java │ │ │ │ ├── CaptureListener.kt │ │ │ │ ├── CompareSizesByArea.kt │ │ │ │ ├── view │ │ │ │ └── CameraView.java │ │ │ │ ├── util │ │ │ │ ├── AudioUtil.java │ │ │ │ ├── ScreenUtils.java │ │ │ │ ├── LogUtil.java │ │ │ │ ├── DeviceUtil.java │ │ │ │ ├── AngleUtil.java │ │ │ │ ├── FileUtil.java │ │ │ │ ├── CheckPermission.java │ │ │ │ └── CameraParamUtil.java │ │ │ │ ├── state │ │ │ │ ├── State.java │ │ │ │ ├── BorrowVideoState.java │ │ │ │ ├── BorrowPictureState.java │ │ │ │ ├── PreviewState.java │ │ │ │ └── CameraMachine.java │ │ │ │ ├── VideoRecordEventExt.kt │ │ │ │ ├── ReturnButton.java │ │ │ │ ├── AutoFitTextureView.kt │ │ │ │ ├── FoucsView.java │ │ │ │ ├── VideoQualityExt.kt │ │ │ │ ├── TypeButton.java │ │ │ │ ├── CaptureImageButton.kt │ │ │ │ ├── CaptureButton.java │ │ │ │ ├── CaptureLayout.java │ │ │ │ ├── CustomCameraView.java │ │ │ │ └── JCameraView.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── hbzhou │ │ │ └── open │ │ │ └── flowcamera │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── hbzhou │ │ └── open │ │ └── flowcamera │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── assets ├── mmp1.png ├── mmp2.jpg ├── mmp3.png ├── alipayicon.jpg ├── 20191221222458.jpg └── 20191221222518.jpg ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── gradlew.bat ├── README.md ├── gradlew └── LICENSE /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /flowcamera/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /flowcamera/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | *.iml 3 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':flowcamera' 2 | rootProject.name='CameraView' 3 | -------------------------------------------------------------------------------- /assets/mmp1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/mmp1.png -------------------------------------------------------------------------------- /assets/mmp2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/mmp2.jpg -------------------------------------------------------------------------------- /assets/mmp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/mmp3.png -------------------------------------------------------------------------------- /assets/alipayicon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/alipayicon.jpg -------------------------------------------------------------------------------- /app/debug/app-debug.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/debug/app-debug.apk -------------------------------------------------------------------------------- /assets/20191221222458.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/20191221222458.jpg -------------------------------------------------------------------------------- /assets/20191221222518.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/assets/20191221222518.jpg -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/release/app-release.apk -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | CameraView 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /flowcamera/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | CameraLibrary 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xionger0520/flowcamera/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/debug/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"app-debug.apk","properties":{}}] -------------------------------------------------------------------------------- /app/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] -------------------------------------------------------------------------------- /app/src/main/java/com/hbzhou/open/camera/MyApplication.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.camera 2 | 3 | import android.app.Application 4 | 5 | /** 6 | * author hbzhou 7 | * date 2019/12/16 13:54 8 | */ 9 | class MyApplication : Application() { 10 | } -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #008577 4 | #00574B 5 | #D81B60 6 | 7 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/ClickListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | public interface ClickListener { 8 | void onClick(); 9 | } 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/ResultListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | public interface ResultListener { 8 | void callback(); 9 | } 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/ReturnListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | public interface ReturnListener { 8 | void onReturn(); 9 | } 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/OnVideoPlayPrepareListener.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener 2 | 3 | 4 | /** 5 | * author hbzhou 6 | * date 2019/12/24 16:51 7 | */ 8 | interface OnVideoPlayPrepareListener { 9 | fun onPrepared() 10 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Apr 02 20:18:16 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip 7 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/TypeListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | public interface TypeListener { 8 | void cancel(); 9 | 10 | void confirm(); 11 | } 12 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/ErrorListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | public interface ErrorListener { 8 | void onError(); 9 | void AudioPermissionError(); 10 | } 11 | -------------------------------------------------------------------------------- /flowcamera/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /flowcamera/src/main/res/drawable/ic_flash_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/JCameraListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | /** 6 | * author hbzhou 7 | * date 2019/12/13 10:49 8 | */ 9 | public interface JCameraListener { 10 | 11 | void captureSuccess(Bitmap bitmap); 12 | 13 | void recordSuccess(String url, Bitmap firstFrame); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/CaptureListener.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera 2 | 3 | 4 | /** 5 | * author hbzhou 6 | * date 2019/12/13 11:13 7 | */ 8 | interface CaptureListener { 9 | 10 | fun takePictures() 11 | 12 | fun recordShort(time: Long) 13 | 14 | fun recordStart() 15 | 16 | fun recordEnd(time: Long) 17 | 18 | fun recordZoom(zoom: Float) 19 | 20 | fun recordError() 21 | } -------------------------------------------------------------------------------- /flowcamera/src/main/res/drawable/ic_flash_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/test/java/com/hbzhou/open/camera/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.camera 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/CaptureListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | /** 4 | * author hbzhou 5 | * date 2019/12/13 10:49 6 | */ 7 | 8 | public interface CaptureListener { 9 | void takePictures(); 10 | 11 | void recordShort(long time); 12 | 13 | void recordStart(); 14 | 15 | void recordEnd(long time); 16 | 17 | void recordZoom(float zoom); 18 | 19 | void recordError(); 20 | } 21 | -------------------------------------------------------------------------------- /flowcamera/src/main/res/drawable/ic_flash_auto.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /flowcamera/src/test/java/com/hbzhou/open/flowcamera/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /flowcamera/src/main/res/drawable/ic_photo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/CompareSizesByArea.kt: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera 2 | 3 | import android.util.Size 4 | import java.lang.Long.signum 5 | 6 | /** 7 | * author hbzhou 8 | * date 2019/12/13 10:53 9 | */ 10 | class CompareSizesByArea : Comparator { 11 | 12 | // We cast here to ensure the multiplications won't overflow 13 | override fun compare(lhs: Size, rhs: Size) = 14 | signum(lhs.width.toLong() * lhs.height - rhs.width.toLong() * rhs.height) 15 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | /.idea/compiler.xml 16 | /.idea/gradle.xml 17 | /.idea/codeStyles/codeStyleConfig.xml 18 | /.idea/codeStyles/Project.xml 19 | /.idea/jarRepositories.xml 20 | /.idea/misc.xml 21 | /.idea/vcs.xml 22 | /.idea/runConfigurations.xml 23 | /build/ 24 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/listener/FlowCameraListener.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.listener; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import java.io.File; 7 | 8 | /** 9 | * author hbzhou 10 | * date 2019/12/16 12:06 11 | */ 12 | public interface FlowCameraListener { 13 | 14 | void captureSuccess(@NonNull File file); 15 | 16 | void recordSuccess(@NonNull File file); 17 | 18 | void onError(int videoCaptureError, @NonNull String message, @Nullable Throwable cause); 19 | } 20 | -------------------------------------------------------------------------------- /flowcamera/src/main/res/drawable/ic_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /flowcamera/src/main/java/com/hbzhou/open/flowcamera/view/CameraView.java: -------------------------------------------------------------------------------- 1 | package com.hbzhou.open.flowcamera.view; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | /** 6 | * author hbzhou 7 | * date 2019/12/13 10:49 8 | */ 9 | public interface CameraView { 10 | void resetState(int type); 11 | 12 | void confirmState(int type); 13 | 14 | void showPicture(Bitmap bitmap, boolean isVertical); 15 | 16 | void playVideo(Bitmap firstFrame, String url); 17 | 18 | void stopVideo(); 19 | 20 | void setTip(String tip); 21 | 22 | void startPreviewCallback(); 23 | 24 | boolean handlerFoucs(float x, float y); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/welcome_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 |