Commit 31cde7c5d39ddec17da5dd1fd7b5b18153cb2227

Authored by YangShuai
1 parent 70f46c48

重构项目

Showing 39 changed files with 0 additions and 4193 deletions

Too many changes to show.

To preserve performance only 39 of 138 files are displayed.

core/base/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.animation.AnimatorSet;
4   -import android.animation.ObjectAnimator;
5   -import android.content.Context;
6   -import android.graphics.Bitmap;
7   -import android.graphics.BitmapFactory;
8   -import android.graphics.ImageFormat;
9   -import android.graphics.Matrix;
10   -import android.graphics.Rect;
11   -import android.graphics.RectF;
12   -import android.hardware.Camera;
13   -import android.hardware.Sensor;
14   -import android.hardware.SensorEvent;
15   -import android.hardware.SensorEventListener;
16   -import android.hardware.SensorManager;
17   -import android.media.MediaRecorder;
18   -import android.os.Build;
19   -import android.os.Environment;
20   -import android.util.Log;
21   -import android.view.Surface;
22   -import android.view.SurfaceHolder;
23   -import android.widget.ImageView;
24   -
25   -import com.cjt2325.cameralibrary.listener.ErrorListener;
26   -import com.cjt2325.cameralibrary.util.AngleUtil;
27   -import com.cjt2325.cameralibrary.util.CameraParamUtil;
28   -import com.cjt2325.cameralibrary.util.CheckPermission;
29   -import com.cjt2325.cameralibrary.util.DeviceUtil;
30   -import com.cjt2325.cameralibrary.util.FileUtil;
31   -import com.cjt2325.cameralibrary.util.LogUtil;
32   -import com.cjt2325.cameralibrary.util.ScreenUtils;
33   -
34   -import java.io.File;
35   -import java.io.IOException;
36   -import java.util.ArrayList;
37   -import java.util.List;
38   -
39   -import static android.graphics.Bitmap.createBitmap;
40   -
41   -/**
42   - * =====================================
43   - * 作 者: 陈嘉桐
44   - * 版 本:1.1.4
45   - * 创建日期:2017/4/25
46   - * 描 述:camera操作单例
47   - * =====================================
48   - */
49   -@SuppressWarnings("deprecation")
50   -public class CameraInterface implements Camera.PreviewCallback {
51   -
52   - private static final String TAG = "CJT";
53   -
54   - private volatile static CameraInterface mCameraInterface;
55   -
56   - public static void destroyCameraInterface() {
57   - if (mCameraInterface != null) {
58   - mCameraInterface = null;
59   - }
60   - }
61   -
62   - private Camera mCamera;
63   - private Camera.Parameters mParams;
64   - private boolean isPreviewing = false;
65   -
66   - private int SELECTED_CAMERA = -1;
67   - private int CAMERA_POST_POSITION = -1;
68   - private int CAMERA_FRONT_POSITION = -1;
69   -
70   - private SurfaceHolder mHolder = null;
71   - private float screenProp = -1.0f;
72   -
73   - private boolean isRecorder = false;
74   - private MediaRecorder mediaRecorder;
75   - private String videoFileName;
76   - private String saveVideoPath;
77   - private String videoFileAbsPath;
78   -
79   - private ErrorListener errorLisenter;
80   -
81   - private ImageView mSwitchView;
82   - private ImageView mFlashLamp;
83   -
84   - private int preview_width;
85   - private int preview_height;
86   -
87   - private int angle = 0;
88   - private int cameraAngle = 90;//摄像头角度 默认为90度
89   - private int rotation = 0;
90   - private byte[] firstFrame_data;
91   -
92   - public static final int TYPE_RECORDER = 0x090;
93   - public static final int TYPE_CAPTURE = 0x091;
94   - private int nowScaleRate = 0;
95   - private int recordScleRate = 0;
96   -
97   - //视频质量
98   - private int mediaQuality = JCameraView.MEDIA_QUALITY_HIGH;
99   -
100   - //获取CameraInterface单例
101   - public static synchronized CameraInterface getInstance() {
102   - if (mCameraInterface == null)
103   - synchronized (CameraInterface.class) {
104   - if (mCameraInterface == null)
105   - mCameraInterface = new CameraInterface();
106   - }
107   - return mCameraInterface;
108   - }
109   -
110   - public void setSwitchView(ImageView mSwitchView, ImageView mFlashLamp) {
111   - this.mSwitchView = mSwitchView;
112   - this.mFlashLamp = mFlashLamp;
113   - if (mSwitchView != null) {
114   - cameraAngle = CameraParamUtil.getInstance().getCameraDisplayOrientation(mSwitchView.getContext(),
115   - SELECTED_CAMERA);
116   - }
117   - }
118   -
119   - private SensorEventListener sensorEventListener = new SensorEventListener() {
120   - public void onSensorChanged(SensorEvent event) {
121   - if (Sensor.TYPE_ACCELEROMETER != event.sensor.getType()) {
122   - return;
123   - }
124   - float[] values = event.values;
125   - angle = AngleUtil.getSensorAngle(values[0], values[1]);
126   - rotationAnimation();
127   - }
128   -
129   - public void onAccuracyChanged(Sensor sensor, int accuracy) {
130   - }
131   - };
132   -
133   - //切换摄像头icon跟随手机角度进行旋转
134   - private void rotationAnimation() {
135   - if (mSwitchView == null) {
136   - return;
137   - }
138   - if (rotation != angle) {
139   - int start_rotaion = 0;
140   - int end_rotation = 0;
141   - switch (rotation) {
142   - case 0:
143   - start_rotaion = 0;
144   - switch (angle) {
145   - case 90:
146   - end_rotation = -90;
147   - break;
148   - case 270:
149   - end_rotation = 90;
150   - break;
151   - }
152   - break;
153   - case 90:
154   - start_rotaion = -90;
155   - switch (angle) {
156   - case 0:
157   - end_rotation = 0;
158   - break;
159   - case 180:
160   - end_rotation = -180;
161   - break;
162   - }
163   - break;
164   - case 180:
165   - start_rotaion = 180;
166   - switch (angle) {
167   - case 90:
168   - end_rotation = 270;
169   - break;
170   - case 270:
171   - end_rotation = 90;
172   - break;
173   - }
174   - break;
175   - case 270:
176   - start_rotaion = 90;
177   - switch (angle) {
178   - case 0:
179   - end_rotation = 0;
180   - break;
181   - case 180:
182   - end_rotation = 180;
183   - break;
184   - }
185   - break;
186   - }
187   - ObjectAnimator animC = ObjectAnimator.ofFloat(mSwitchView, "rotation", start_rotaion, end_rotation);
188   -// ObjectAnimator animF = ObjectAnimator.ofFloat(mFlashLamp, "rotation", start_rotaion, end_rotation);
189   - AnimatorSet set = new AnimatorSet();
190   - set.playTogether(animC);
191   - set.setDuration(500);
192   - set.start();
193   - rotation = angle;
194   - }
195   - }
196   -
197   - @SuppressWarnings("ResultOfMethodCallIgnored")
198   - void setSaveVideoPath(String saveVideoPath) {
199   - this.saveVideoPath = saveVideoPath;
200   - File file = new File(saveVideoPath);
201   - if (!file.exists()) {
202   - file.mkdirs();
203   - }
204   - }
205   -
206   -
207   - public void setZoom(float zoom, int type) {
208   - if (mCamera == null) {
209   - return;
210   - }
211   - try {
212   - if (mParams == null) {
213   - mParams = mCamera.getParameters();
214   - }
215   - if (!mParams.isZoomSupported() || !mParams.isSmoothZoomSupported()) {
216   - return;
217   - }
218   - switch (type) {
219   - case TYPE_RECORDER:
220   - //如果不是录制视频中,上滑不会缩放
221   - if (!isRecorder) {
222   - return;
223   - }
224   - if (zoom >= 0) {
225   - //每移动50个像素缩放一个级别
226   - int scaleRate = (int) (zoom / 40);
227   - if (scaleRate <= mParams.getMaxZoom() && scaleRate >= nowScaleRate && recordScleRate != scaleRate) {
228   - mParams.setZoom(scaleRate);
229   - mCamera.setParameters(mParams);
230   - recordScleRate = scaleRate;
231   - }
232   - }
233   - break;
234   - case TYPE_CAPTURE:
235   - if (isRecorder) {
236   - return;
237   - }
238   - //每移动50个像素缩放一个级别
239   - int scaleRate = (int) (zoom / 50);
240   - if (scaleRate < mParams.getMaxZoom()) {
241   - nowScaleRate += scaleRate;
242   - if (nowScaleRate < 0) {
243   - nowScaleRate = 0;
244   - } else if (nowScaleRate > mParams.getMaxZoom()) {
245   - nowScaleRate = mParams.getMaxZoom();
246   - }
247   - mParams.setZoom(nowScaleRate);
248   - mCamera.setParameters(mParams);
249   - }
250   - LogUtil.i("setZoom = " + nowScaleRate);
251   - break;
252   - }
253   - } catch (Exception ignored) {
254   -
255   - }
256   - }
257   -
258   - void setMediaQuality(int quality) {
259   - this.mediaQuality = quality;
260   - }
261   -
262   -
263   - @Override
264   - public void onPreviewFrame(byte[] data, Camera camera) {
265   - firstFrame_data = data;
266   - }
267   -
268   - public void setFlashMode(String flashMode) {
269   - if (mCamera == null)
270   - return;
271   - try {
272   -
273   - Camera.Parameters parameters = mCamera.getParameters();
274   - List<String> flashModes = parameters.getSupportedFlashModes();
275   - if (flashModes == null) {
276   - return;
277   - }
278   -
279   - if (flashMode.contains(Camera.Parameters.FLASH_MODE_ON)) {
280   - parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
281   - mCamera.setParameters(parameters);
282   - } else if (flashMode.contains(Camera.Parameters.FLASH_MODE_OFF)) {
283   - parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
284   - mCamera.setParameters(parameters);
285   - }
286   -
287   - return;
288   - } catch (Exception e) {
289   - Log.e("Camera", "闪光灯异常", e);
290   - }
291   - return;
292   - }
293   -
294   - public int getSelectedCamera() {
295   - return SELECTED_CAMERA;
296   - }
297   -
298   - public interface CameraOpenOverCallback {
299   - void cameraHasOpened();
300   - }
301   -
302   - private CameraInterface() {
303   - findAvailableCameras();
304   - SELECTED_CAMERA = CAMERA_POST_POSITION;
305   - saveVideoPath = "";
306   - }
307   -
308   -
309   - /**
310   - * open Camera
311   - */
312   - void doOpenCamera(CameraOpenOverCallback callback) {
313   - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
314   - if (!CheckPermission.isCameraUseable(SELECTED_CAMERA) && this.errorLisenter != null) {
315   - this.errorLisenter.onError();
316   - return;
317   - }
318   - }
319   - if (mCamera == null) {
320   - openCamera(SELECTED_CAMERA);
321   - }
322   - callback.cameraHasOpened();
323   - }
324   -
325   - private void setFlashModel() {
326   - mParams = mCamera.getParameters();
327   - mParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); //设置camera参数为Torch模式
328   - mCamera.setParameters(mParams);
329   - }
330   -
331   - private synchronized boolean openCamera(int id) {
332   - try {
333   - this.mCamera = Camera.open(id);
334   - } catch (Exception e) {
335   - if (this.errorLisenter != null) this.errorLisenter.onError();
336   - Log.e("CJT", "enable shutter sound faild", e);
337   - }
338   -
339   - try {
340   - if (Build.VERSION.SDK_INT > 17 && this.mCamera != null) {
341   - this.mCamera.enableShutterSound(false);
342   - }
343   - } catch (Exception e) {
344   - Log.e("CJT", "enable shutter sound faild", e);
345   - }
346   -
347   - return mCamera != null;
348   - }
349   -
350   - public synchronized boolean switchCamera(SurfaceHolder holder, float screenProp) {
351   - if (SELECTED_CAMERA == CAMERA_POST_POSITION) {
352   - SELECTED_CAMERA = CAMERA_FRONT_POSITION;
353   - } else {
354   - SELECTED_CAMERA = CAMERA_POST_POSITION;
355   - }
356   - doDestroyCamera();
357   - LogUtil.i("open start");
358   - openCamera(SELECTED_CAMERA);
359   - LogUtil.i("open end");
360   - return doStartPreview(holder, screenProp);
361   - }
362   -
363   - /**
364   - * doStartPreview
365   - */
366   - public boolean doStartPreview(SurfaceHolder holder, float screenProp) {
367   - if (isPreviewing) {
368   - LogUtil.i("doStartPreview isPreviewing");
369   - }
370   - if (this.screenProp < 0) {
371   - this.screenProp = screenProp;
372   - }
373   - if (holder == null) {
374   - return false;
375   - }
376   - this.mHolder = holder;
377   - if (mCamera != null) {
378   - try {
379   - mParams = mCamera.getParameters();
380   - Camera.Size previewSize = CameraParamUtil.getInstance().getPreviewSize(mParams
381   - .getSupportedPreviewSizes(), 1000, screenProp);
382   - Camera.Size pictureSize = CameraParamUtil.getInstance().getPictureSize(mParams
383   - .getSupportedPictureSizes(), 1200, screenProp);
384   -
385   - mParams.setPreviewSize(previewSize.width, previewSize.height);
386   -
387   - preview_width = previewSize.width;
388   - preview_height = previewSize.height;
389   -
390   - mParams.setPictureSize(pictureSize.width, pictureSize.height);
391   -
392   - if (CameraParamUtil.getInstance().isSupportedFocusMode(
393   - mParams.getSupportedFocusModes(),
394   - Camera.Parameters.FOCUS_MODE_AUTO)) {
395   - mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
396   - }
397   - if (CameraParamUtil.getInstance().isSupportedPictureFormats(mParams.getSupportedPictureFormats(),
398   - ImageFormat.JPEG)) {
399   - mParams.setPictureFormat(ImageFormat.JPEG);
400   - mParams.setJpegQuality(100);
401   - }
402   - try {
403   - mCamera.setParameters(mParams);
404   - } catch (Exception e) {
405   - Log.e("Camera", "开启预览异常", e);
406   - }
407   - // mParams = mCamera.getParameters();
408   - mCamera.setPreviewDisplay(holder); //SurfaceView
409   - mCamera.setDisplayOrientation(cameraAngle);//浏览角度
410   - mCamera.setPreviewCallback(this); //每一帧回调
411   - mCamera.startPreview();//启动浏览
412   - isPreviewing = true;
413   - Log.i(TAG, "=== Start Preview ===");
414   - return true;
415   - } catch (Exception e) {
416   - Log.e("Camera", "开启预览异常", e);
417   - }
418   - }
419   - return false;
420   - }
421   -
422   - /**
423   - * 停止预览
424   - */
425   - public void doStopPreview() {
426   - if (null != mCamera) {
427   - try {
428   - mCamera.setPreviewCallback(null);
429   - mCamera.stopPreview();
430   - //这句要在stopPreview后执行,不然会卡顿或者花屏
431   - mCamera.setPreviewDisplay(null);
432   - isPreviewing = false;
433   - mCamera.lock();
434   - Log.i(TAG, "=== Stop Preview ===");
435   - } catch (Exception e) {
436   - Log.e("Camera", "", e);
437   - }
438   - }
439   - }
440   -
441   - /**
442   - * 销毁Camera
443   - */
444   - boolean doDestroyCamera() {
445   - errorLisenter = null;
446   - if (null != mCamera) {
447   - try {
448   - mCamera.setPreviewCallback(null);
449   - mSwitchView = null;
450   -// mFlashLamp = null;
451   - mCamera.stopPreview();
452   - //这句要在stopPreview后执行,不然会卡顿或者花屏
453   - mCamera.setPreviewDisplay(null);
454   - mHolder = null;
455   - isPreviewing = false;
456   - mCamera.lock();
457   - mCamera.release();
458   - mCamera = null;
459   -// destroyCameraInterface();
460   - Log.i(TAG, "=== Destroy Camera ===");
461   - return true;
462   - } catch (Exception e) {
463   - Log.e("Camera", "", e);
464   - }
465   - return false;
466   - } else {
467   - Log.i(TAG, "=== Camera Null===");
468   - }
469   - return true;
470   - }
471   -
472   - /**
473   - * 拍照
474   - */
475   - private int nowAngle;
476   -
477   - public boolean takePicture(TakePictureCallback callback) {
478   - if (mCamera == null) {
479   - return false;
480   - }
481   - switch (cameraAngle) {
482   - case 90:
483   - nowAngle = Math.abs(angle + cameraAngle) % 360;
484   - break;
485   - case 270:
486   - nowAngle = Math.abs(cameraAngle - angle);
487   - break;
488   - }
489   -//
490   - Log.i("CJT", angle + " = " + cameraAngle + " = " + nowAngle);
491   - try {
492   - mCamera.takePicture(null, null, new Camera.PictureCallback() {
493   - @Override
494   - public void onPictureTaken(byte[] data, Camera camera) {
495   - Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
496   - Matrix matrix = new Matrix();
497   - if (SELECTED_CAMERA == CAMERA_POST_POSITION) {
498   - matrix.setRotate(nowAngle);
499   - } else if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
500   - matrix.setRotate(360 - nowAngle);
501   - matrix.postScale(-1, 1);
502   - }
503   -
504   - bitmap = createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
505   - if (callback != null) {
506   - if (nowAngle == 90 || nowAngle == 270) {
507   - callback.captureResult(bitmap, true);
508   - } else {
509   - callback.captureResult(bitmap, false);
510   - }
511   - }
512   - }
513   - });
514   - return true;
515   - } catch (Exception e) {
516   - Log.e("Camera", "拍摄异常", e);
517   - }
518   - return false;
519   - }
520   -
521   - //启动录像
522   - public boolean startRecord(Surface surface, float screenProp, ErrorCallback callback,Context context) {
523   - if (mCamera == null) return false;
524   - mCamera.setPreviewCallback(null);
525   - final int nowAngle = (angle + 90) % 360;
526   - //获取第一帧图片
527   -// Camera.Parameters parameters = mCamera.getParameters();
528   -// int width = parameters.getPreviewSize().width;
529   -// int height = parameters.getPreviewSize().height;
530   -// YuvImage yuv = new YuvImage(firstFrame_data, parameters.getPreviewFormat(), width, height, null);
531   -// ByteArrayOutputStream out = new ByteArrayOutputStream();
532   -// yuv.compressToJpeg(new Rect(0, 0, width, height), 50, out);
533   -// Matrix matrix = new Matrix();
534   -// if (SELECTED_CAMERA == CAMERA_POST_POSITION) {
535   -// matrix.setRotate(nowAngle);
536   -// } else if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
537   -// matrix.setRotate(270);
538   -// }
539   -
540   - if (isRecorder) {
541   - return true;
542   - }
543   - if (mCamera == null) {
544   - openCamera(SELECTED_CAMERA);
545   - }
546   - if (mCamera == null) {
547   - return false;
548   - }
549   - if (mediaRecorder == null) {
550   - mediaRecorder = new MediaRecorder();
551   - }
552   - if (mParams == null) {
553   - mParams = mCamera.getParameters();
554   - }
555   - List<String> focusModes = mParams.getSupportedFocusModes();
556   - if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
557   - mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
558   - }
559   - try {
560   - mCamera.setParameters(mParams);
561   - } catch (Exception e) {
562   -
563   - }
564   - try {
565   - mCamera.unlock();
566   - } catch (Exception e) {
567   -
568   - }
569   - try {
570   - mediaRecorder.reset();
571   - mediaRecorder.setCamera(mCamera);
572   - mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
573   - mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
574   - mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
575   - mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
576   - mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
577   -
578   -
579   - Camera.Size videoSize;
580   - if (mParams.getSupportedVideoSizes() == null) {
581   - videoSize = CameraParamUtil.getInstance().getPreviewSize(mParams.getSupportedPreviewSizes(), 600,
582   - screenProp);
583   - } else {
584   - videoSize = CameraParamUtil.getInstance().getPreviewSize(mParams.getSupportedVideoSizes(), 600,
585   - screenProp);
586   - }
587   - Log.i(TAG, "setVideoSize width = " + videoSize.width + "height = " + videoSize.height);
588   - if (videoSize.width == videoSize.height) {
589   - mediaRecorder.setVideoSize(preview_width, preview_height);
590   - } else {
591   - mediaRecorder.setVideoSize(videoSize.width, videoSize.height);
592   - }
593   -// if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
594   -// mediaRecorder.setOrientationHint(270);
595   -// } else {
596   -// mediaRecorder.setOrientationHint(nowAngle);
597   -//// mediaRecorder.setOrientationHint(90);
598   -// }
599   -
600   - if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
601   - //手机预览倒立的处理
602   - if (cameraAngle == 270) {
603   - //横屏
604   - if (nowAngle == 0) {
605   - mediaRecorder.setOrientationHint(180);
606   - } else if (nowAngle == 270) {
607   - mediaRecorder.setOrientationHint(270);
608   - } else {
609   - mediaRecorder.setOrientationHint(90);
610   - }
611   - } else {
612   - if (nowAngle == 90) {
613   - mediaRecorder.setOrientationHint(270);
614   - } else if (nowAngle == 270) {
615   - mediaRecorder.setOrientationHint(90);
616   - } else {
617   - mediaRecorder.setOrientationHint(nowAngle);
618   - }
619   - }
620   - } else {
621   - mediaRecorder.setOrientationHint(nowAngle);
622   - }
623   -
624   -
625   - if (DeviceUtil.isHuaWeiRongyao()) {
626   - mediaRecorder.setVideoEncodingBitRate(4 * 100000);
627   - } else {
628   - mediaRecorder.setVideoEncodingBitRate(mediaQuality);
629   - }
630   - mediaRecorder.setPreviewDisplay(surface);
631   -
632   - videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
633   - if (saveVideoPath.equals("")) {
634   - saveVideoPath = (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q ?context.getExternalFilesDir("") : Environment.getExternalStorageDirectory()).getPath();
635   - }
636   - videoFileAbsPath = saveVideoPath + File.separator + videoFileName;
637   - mediaRecorder.setOutputFile(videoFileAbsPath);
638   -
639   - mediaRecorder.prepare();
640   - mediaRecorder.start();
641   - isRecorder = true;
642   - return true;
643   - } catch (IllegalStateException e) {
644   - e.printStackTrace();
645   - Log.i("CJT", "startRecord IllegalStateException");
646   - if (this.errorLisenter != null) {
647   - this.errorLisenter.onError();
648   - }
649   - } catch (IOException e) {
650   - e.printStackTrace();
651   - Log.i("CJT", "startRecord IOException");
652   - if (this.errorLisenter != null) {
653   - this.errorLisenter.onError();
654   - }
655   - } catch (RuntimeException e) {
656   - Log.i("CJT", "startRecord RuntimeException");
657   - } catch (Exception e) {
658   - Log.i("CJT", "startRecord Exception");
659   - }
660   - return false;
661   - }
662   -
663   - public void onDestroy() {
664   - if (isRecorder) {
665   - return;
666   - }
667   - if (mediaRecorder != null) {
668   - mediaRecorder.setOnErrorListener(null);
669   - mediaRecorder.setOnInfoListener(null);
670   - mediaRecorder.setPreviewDisplay(null);
671   - try {
672   - mediaRecorder.stop();
673   - } catch (RuntimeException e) {
674   - e.printStackTrace();
675   - mediaRecorder = null;
676   - mediaRecorder = new MediaRecorder();
677   - } finally {
678   - if (mediaRecorder != null) mediaRecorder.release();
679   - mediaRecorder = null;
680   - isRecorder = false;
681   - }
682   - }
683   - doStopPreview();
684   - }
685   -
686   - //停止录像
687   - public void stopRecord(boolean isShort, StopRecordCallback callback) {
688   - if (!isRecorder) {
689   - return;
690   - }
691   - if (mediaRecorder != null) {
692   - mediaRecorder.setOnErrorListener(null);
693   - mediaRecorder.setOnInfoListener(null);
694   - mediaRecorder.setPreviewDisplay(null);
695   - try {
696   - mediaRecorder.stop();
697   - } catch (RuntimeException e) {
698   - e.printStackTrace();
699   - mediaRecorder = null;
700   - mediaRecorder = new MediaRecorder();
701   - } finally {
702   - if (mediaRecorder != null) {
703   - mediaRecorder.release();
704   - }
705   - mediaRecorder = null;
706   - isRecorder = false;
707   - }
708   - if (isShort) {
709   - if (FileUtil.deleteFile(videoFileAbsPath)) {
710   - callback.recordResult(null);
711   - }
712   - return;
713   - }
714   - doStopPreview();
715   - String fileName = saveVideoPath + File.separator + videoFileName;
716   - callback.recordResult(fileName);
717   - }
718   - }
719   -
720   - private void findAvailableCameras() {
721   - Camera.CameraInfo info = new Camera.CameraInfo();
722   - int cameraNum = Camera.getNumberOfCameras();
723   - for (int i = 0; i < cameraNum; i++) {
724   - //TODO 存在异常隐患
725   - try {
726   - Camera.getCameraInfo(i, info);
727   - } catch (Exception e) {
728   - Log.e("CameraInterface", "相机信息获取异常", e);
729   - continue;
730   - }
731   - switch (info.facing) {
732   - case Camera.CameraInfo.CAMERA_FACING_FRONT:
733   - CAMERA_FRONT_POSITION = info.facing;
734   - break;
735   - case Camera.CameraInfo.CAMERA_FACING_BACK:
736   - CAMERA_POST_POSITION = info.facing;
737   - break;
738   - }
739   - }
740   - }
741   -
742   - private int handlerTime = 0;
743   -
744   - public boolean handleFocus(final Context context, final float x, final float y, final FocusCallback callback) {
745   - if (mCamera == null) {
746   - return false;
747   - }
748   - try {
749   - final Camera.Parameters params = mCamera.getParameters();
750   - Rect focusRect = calculateTapArea(x, y, 1f, context);
751   - mCamera.cancelAutoFocus();
752   - if (params.getMaxNumFocusAreas() > 0) {
753   - List<Camera.Area> focusAreas = new ArrayList<>();
754   - focusAreas.add(new Camera.Area(focusRect, 800));
755   - params.setFocusAreas(focusAreas);
756   - } else {
757   - Log.i(TAG, "focus areas not supported");
758   - callback.focusSuccess();
759   - return false;
760   - }
761   - final String currentFocusMode = params.getFocusMode();
762   -
763   - params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
764   - mCamera.setParameters(params);
765   - mCamera.autoFocus(new Camera.AutoFocusCallback() {
766   - @Override
767   - public void onAutoFocus(boolean success, Camera camera) {
768   - if (success || handlerTime > 10) {
769   - Camera.Parameters params = camera.getParameters();
770   - params.setFocusMode(currentFocusMode);
771   - camera.setParameters(params);
772   - handlerTime = 0;
773   - callback.focusSuccess();
774   - } else {
775   - handlerTime++;
776   - handleFocus(context, x, y, callback);
777   - }
778   - }
779   - });
780   - return true;
781   - } catch (Exception e) {
782   - Log.e(TAG, "autoFocus failer");
783   - }
784   - return false;
785   - }
786   -
787   -
788   - private static Rect calculateTapArea(float x, float y, float coefficient, Context context) {
789   - float focusAreaSize = 300;
790   - int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue();
791   - int centerX = (int) (x / ScreenUtils.getScreenWidth(context) * 2000 - 1000);
792   - int centerY = (int) (y / ScreenUtils.getScreenHeight(context) * 2000 - 1000);
793   - int left = clamp(centerX - areaSize / 2, -1000, 1000);
794   - int top = clamp(centerY - areaSize / 2, -1000, 1000);
795   - RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);
796   - return new Rect(Math.round(rectF.left), Math.round(rectF.top), Math.round(rectF.right), Math.round(rectF
797   - .bottom));
798   - }
799   -
800   - private static int clamp(int x, int min, int max) {
801   - if (x > max) {
802   - return max;
803   - }
804   - if (x < min) {
805   - return min;
806   - }
807   - return x;
808   - }
809   -
810   - void setErrorLinsenter(ErrorListener errorLisenter) {
811   - this.errorLisenter = errorLisenter;
812   - }
813   -
814   -
815   - public interface StopRecordCallback {
816   - void recordResult(String url);
817   - }
818   -
819   - interface ErrorCallback {
820   - void onError();
821   - }
822   -
823   - public interface TakePictureCallback {
824   - void captureResult(Bitmap bitmap, boolean isVertical);
825   - }
826   -
827   - public interface FocusCallback {
828   - void focusSuccess();
829   -
830   - }
831   -
832   -
833   - void registerSensorManager(Context context) {
834   - SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
835   - if (sm == null) return;
836   - Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
837   - sm.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
838   - }
839   -
840   - void unregisterSensorManager(Context context) {
841   - SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
842   - if (sm == null) return;
843   - sm.unregisterListener(sensorEventListener);
844   - }
845   -
846   - void isPreview(boolean res) {
847   - this.isPreviewing = res;
848   - }
849   -}
core/base/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.animation.Animator;
4   -import android.animation.AnimatorListenerAdapter;
5   -import android.animation.AnimatorSet;
6   -import android.animation.ValueAnimator;
7   -import android.content.Context;
8   -import android.graphics.Canvas;
9   -import android.graphics.Color;
10   -import android.graphics.Paint;
11   -import android.graphics.RectF;
12   -import android.os.CountDownTimer;
13   -import android.view.MotionEvent;
14   -import android.view.View;
15   -
16   -import com.cjt2325.cameralibrary.listener.CaptureListener;
17   -import com.cjt2325.cameralibrary.util.CheckPermission;
18   -import com.cjt2325.cameralibrary.util.LogUtil;
19   -
20   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_BOTH;
21   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_ONLY_CAPTURE;
22   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_ONLY_RECORDER;
23   -
24   -
25   -/**
26   - * =====================================
27   - * 作 者: 陈嘉桐 445263848@qq.com
28   - * 版 本:1.1.4
29   - * 创建日期:2017/4/25
30   - * 描 述:拍照按钮
31   - * =====================================
32   - */
33   -public class CaptureButton extends View {
34   -
35   - private int state; //当前按钮状态
36   - private int button_state; //按钮可执行的功能状态(拍照,录制,两者)
37   -
38   - public static final int STATE_IDLE = 0x001; //空闲状态
39   - public static final int STATE_PRESS = 0x002; //按下状态
40   - public static final int STATE_LONG_PRESS = 0x003; //长按状态
41   - public static final int STATE_RECORDERING = 0x004; //录制状态
42   - public static final int STATE_BAN = 0x005; //禁止状态
43   -
44   - private int progress_color = Color.GREEN; //进度条颜色
45   - private int outside_color = 0xEEf2f2f2; //外圆背景色
46   - private int inside_color = Color.WHITE; //内圆背景色
47   -
48   -
49   - private float event_Y; //Touch_Event_Down时候记录的Y值
50   -
51   -
52   - private Paint mPaint;
53   -
54   - private float strokeWidth; //进度条宽度
55   - private int outside_add_size; //长按外圆半径变大的Size
56   - private int inside_reduce_size; //长安内圆缩小的Size
57   -
58   - //中心坐标
59   - private float center_X;
60   - private float center_Y;
61   -
62   - private float button_radius; //按钮半径
63   - private float button_outside_radius; //外圆半径
64   - private float button_inside_radius; //内圆半径
65   - private int button_size; //按钮大小
66   -
67   - private float progress; //录制视频的进度
68   - private int duration; //录制视频最大时间长度
69   - private int min_duration; //最短录制时间限制
70   - private int recorded_time; //记录当前录制的时间
71   -
72   - private RectF rectF;
73   -
74   - private LongPressRunnable longPressRunnable; //长按后处理的逻辑Runnable
75   - private CaptureListener captureLisenter; //按钮回调接口
76   - private RecordCountDownTimer timer; //计时器
77   -
78   - public CaptureButton(Context context) {
79   - super(context);
80   - }
81   -
82   - public CaptureButton(Context context, int size) {
83   - super(context);
84   - this.button_size = size;
85   - button_radius = size / 2.0f;
86   -
87   - button_outside_radius = button_radius;
88   - button_inside_radius = button_radius * 0.75f;
89   -
90   - strokeWidth = size / 15;
91   - outside_add_size = size / 5;
92   - inside_reduce_size = size / 8;
93   -
94   - mPaint = new Paint();
95   - mPaint.setAntiAlias(true);
96   -
97   - progress = 0;
98   - longPressRunnable = new LongPressRunnable();
99   -
100   - state = STATE_IDLE; //初始化为空闲状态
101   - LogUtil.i("CaptureButtom start");
102   - duration = 10 * 1000; //默认最长录制时间为10s
103   - LogUtil.i("CaptureButtom end");
104   - min_duration = 2000; //默认最短录制时间为1.5s
105   -
106   - center_X = (button_size + outside_add_size * 2) / 2;
107   - center_Y = (button_size + outside_add_size * 2) / 2;
108   -
109   - rectF = new RectF(
110   - center_X - (button_radius + outside_add_size - strokeWidth / 2),
111   - center_Y - (button_radius + outside_add_size - strokeWidth / 2),
112   - center_X + (button_radius + outside_add_size - strokeWidth / 2),
113   - center_Y + (button_radius + outside_add_size - strokeWidth / 2));
114   -
115   - timer = new RecordCountDownTimer(duration, duration / 360); //录制定时器
116   - }
117   -
118   - @Override
119   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
120   - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
121   - setMeasuredDimension(button_size + outside_add_size * 2, button_size + outside_add_size * 2);
122   - }
123   -
124   - @Override
125   - protected void onDraw(Canvas canvas) {
126   - super.onDraw(canvas);
127   - mPaint.setStyle(Paint.Style.FILL);
128   -
129   - mPaint.setColor(outside_color); //外圆(半透明灰色)
130   - canvas.drawCircle(center_X, center_Y, button_outside_radius, mPaint);
131   -
132   - mPaint.setColor(inside_color); //内圆(白色)
133   - canvas.drawCircle(center_X, center_Y, button_inside_radius, mPaint);
134   -
135   - //如果状态为录制状态,则绘制录制进度条
136   - if (state == STATE_RECORDERING) {
137   - mPaint.setColor(progress_color);
138   - mPaint.setStyle(Paint.Style.STROKE);
139   - mPaint.setStrokeWidth(strokeWidth);
140   - canvas.drawArc(rectF, -90, progress, false, mPaint);
141   - }
142   - }
143   -
144   -
145   - @Override
146   - public boolean onTouchEvent(MotionEvent event) {
147   - switch (event.getAction()) {
148   - case MotionEvent.ACTION_DOWN:
149   - LogUtil.i("state = " + state);
150   - if (event.getPointerCount() > 1 || state != STATE_IDLE)
151   - break;
152   - event_Y = event.getY(); //记录Y值
153   - state = STATE_PRESS; //修改当前状态为点击按下
154   -
155   - //判断按钮状态是否为可录制状态
156   - if ((button_state == BUTTON_STATE_ONLY_RECORDER || button_state == BUTTON_STATE_BOTH))
157   - postDelayed(longPressRunnable, 200); //同时延长500启动长按后处理的逻辑Runnable
158   - break;
159   - case MotionEvent.ACTION_MOVE:
160   - if (captureLisenter != null
161   - && state == STATE_RECORDERING
162   - && (button_state == BUTTON_STATE_ONLY_RECORDER || button_state == BUTTON_STATE_BOTH)) {
163   - //记录当前Y值与按下时候Y值的差值,调用缩放回调接口
164   - captureLisenter.recordZoom(event_Y - event.getY());
165   - }
166   - break;
167   - case MotionEvent.ACTION_UP:
168   - //根据当前按钮的状态进行相应的处理
169   - handlerUnpressByState();
170   - break;
171   - }
172   - return true;
173   - }
174   -
175   - //当手指松开按钮时候处理的逻辑
176   - private void handlerUnpressByState() {
177   - removeCallbacks(longPressRunnable); //移除长按逻辑的Runnable
178   - //根据当前状态处理
179   - switch (state) {
180   - //当前是点击按下
181   - case STATE_PRESS:
182   - if (captureLisenter != null && (button_state == BUTTON_STATE_ONLY_CAPTURE || button_state ==
183   - BUTTON_STATE_BOTH)) {
184   - startCaptureAnimation(button_inside_radius);
185   - } else {
186   - state = STATE_IDLE;
187   - }
188   - break;
189   - //当前是长按状态
190   - case STATE_RECORDERING:
191   - timer.cancel(); //停止计时器
192   - recordEnd(); //录制结束
193   - break;
194   - }
195   - }
196   -
197   - //录制结束
198   - private void recordEnd() {
199   - if (captureLisenter != null) {
200   - if (recorded_time < min_duration)
201   - captureLisenter.recordShort(recorded_time);//回调录制时间过短
202   - else
203   - captureLisenter.recordEnd(recorded_time); //回调录制结束
204   - }
205   - resetRecordAnim(); //重制按钮状态
206   - }
207   -
208   - //重制状态
209   - public void resetRecordAnim() {
210   - state = STATE_BAN;
211   - progress = 0; //重制进度
212   - invalidate();
213   - //还原按钮初始状态动画
214   - startRecordAnimation(
215   - button_outside_radius,
216   - button_radius,
217   - button_inside_radius,
218   - button_radius * 0.75f
219   - );
220   - }
221   -
222   - //内圆动画
223   - private void startCaptureAnimation(float inside_start) {
224   - ValueAnimator inside_anim = ValueAnimator.ofFloat(inside_start, inside_start * 0.75f, inside_start);
225   - inside_anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
226   - @Override
227   - public void onAnimationUpdate(ValueAnimator animation) {
228   - button_inside_radius = (float) animation.getAnimatedValue();
229   - invalidate();
230   - }
231   - });
232   - inside_anim.addListener(new AnimatorListenerAdapter() {
233   - @Override
234   - public void onAnimationEnd(Animator animation) {
235   - super.onAnimationEnd(animation);
236   - //回调拍照接口
237   - captureLisenter.takePictures();
238   - state = STATE_BAN;
239   - }
240   - });
241   - inside_anim.setDuration(100);
242   - inside_anim.start();
243   - }
244   -
245   - //内外圆动画
246   - private void startRecordAnimation(float outside_start, float outside_end, float inside_start, float inside_end) {
247   - ValueAnimator outside_anim = ValueAnimator.ofFloat(outside_start, outside_end);
248   - ValueAnimator inside_anim = ValueAnimator.ofFloat(inside_start, inside_end);
249   - //外圆动画监听
250   - outside_anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
251   - @Override
252   - public void onAnimationUpdate(ValueAnimator animation) {
253   - button_outside_radius = (float) animation.getAnimatedValue();
254   - invalidate();
255   - }
256   - });
257   - //内圆动画监听
258   - inside_anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
259   - @Override
260   - public void onAnimationUpdate(ValueAnimator animation) {
261   - button_inside_radius = (float) animation.getAnimatedValue();
262   - invalidate();
263   - }
264   - });
265   - AnimatorSet set = new AnimatorSet();
266   - //当动画结束后启动录像Runnable并且回调录像开始接口
267   - set.addListener(new AnimatorListenerAdapter() {
268   - @Override
269   - public void onAnimationEnd(Animator animation) {
270   - super.onAnimationEnd(animation);
271   - //设置为录制状态
272   - if (state == STATE_LONG_PRESS) {
273   - if (captureLisenter != null)
274   - captureLisenter.recordStart();
275   - state = STATE_RECORDERING;
276   - timer.start();
277   - }
278   - }
279   - });
280   - set.playTogether(outside_anim, inside_anim);
281   - set.setDuration(0);
282   - set.start();
283   - }
284   -
285   -
286   - //更新进度条
287   - private void updateProgress(long millisUntilFinished) {
288   - recorded_time = (int) (duration - millisUntilFinished);
289   - progress = 360f - millisUntilFinished / (float) duration * 360f;
290   - invalidate();
291   - }
292   -
293   - //录制视频计时器
294   - private class RecordCountDownTimer extends CountDownTimer {
295   - RecordCountDownTimer(long millisInFuture, long countDownInterval) {
296   - super(millisInFuture, countDownInterval);
297   - }
298   -
299   - @Override
300   - public void onTick(long millisUntilFinished) {
301   - updateProgress(millisUntilFinished);
302   - }
303   -
304   - @Override
305   - public void onFinish() {
306   - updateProgress(0);
307   - recordEnd();
308   - }
309   - }
310   -
311   - //长按线程
312   - private class LongPressRunnable implements Runnable {
313   - @Override
314   - public void run() {
315   - state = STATE_LONG_PRESS; //如果按下后经过500毫秒则会修改当前状态为长按状态
316   - //没有录制权限
317   - if (CheckPermission.getRecordState() != CheckPermission.STATE_SUCCESS) {
318   - state = STATE_IDLE;
319   - if (captureLisenter != null) {
320   - captureLisenter.recordError();
321   - return;
322   - }
323   - }
324   - //启动按钮动画,外圆变大,内圆缩小
325   - startRecordAnimation(
326   - button_outside_radius,
327   - button_outside_radius + outside_add_size,
328   - button_inside_radius,
329   - button_inside_radius - inside_reduce_size
330   - );
331   - }
332   - }
333   -
334   - /**************************************************
335   - * 对外提供的API *
336   - **************************************************/
337   -
338   - //设置最长录制时间
339   - public void setDuration(int duration) {
340   - this.duration = duration;
341   - timer = new RecordCountDownTimer(duration, duration / 360); //录制定时器
342   - }
343   -
344   - //设置最短录制时间
345   - public void setMinDuration(int duration) {
346   - this.min_duration = duration;
347   - }
348   -
349   - //设置回调接口
350   - public void setCaptureLisenter(CaptureListener captureLisenter) {
351   - this.captureLisenter = captureLisenter;
352   - }
353   -
354   - //设置按钮功能(拍照和录像)
355   - public void setButtonFeatures(int state) {
356   - this.button_state = state;
357   - }
358   -
359   - //是否空闲状态
360   - public boolean isIdle() {
361   - return state == STATE_IDLE ? true : false;
362   - }
363   -
364   - //设置状态
365   - public void resetState() {
366   - state = STATE_IDLE;
367   - }
368   -}
core/base/src/main/java/com/cjt2325/cameralibrary/CaptureLayout.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.animation.Animator;
4   -import android.animation.AnimatorListenerAdapter;
5   -import android.animation.AnimatorSet;
6   -import android.animation.ObjectAnimator;
7   -import android.content.Context;
8   -import android.content.res.Configuration;
9   -import android.content.res.Resources;
10   -import android.util.AttributeSet;
11   -import android.view.Gravity;
12   -import android.view.View;
13   -import android.widget.FrameLayout;
14   -import android.widget.ImageView;
15   -import android.widget.TextView;
16   -
17   -import com.cjt2325.cameralibrary.listener.CaptureListener;
18   -import com.cjt2325.cameralibrary.listener.ClickListener;
19   -import com.cjt2325.cameralibrary.listener.ReturnListener;
20   -import com.cjt2325.cameralibrary.listener.TypeListener;
21   -
22   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_BOTH;
23   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_ONLY_CAPTURE;
24   -import static com.cjt2325.cameralibrary.JCameraView.BUTTON_STATE_ONLY_RECORDER;
25   -
26   -/**
27   - * =====================================
28   - * 作 者: 陈嘉桐 445263848@qq.com
29   - * 版 本:1.0.4
30   - * 创建日期:2017/4/26
31   - * 描 述:集成各个控件的布局
32   - * =====================================
33   - */
34   -
35   -public class CaptureLayout extends FrameLayout {
36   - private boolean isErrorState = false;
37   - private CaptureListener captureLisenter; //拍照按钮监听
38   - private TypeListener typeLisenter; //拍照或录制后接结果按钮监听
39   - private ReturnListener returnListener; //退出按钮监听
40   - private ClickListener leftClickListener; //左边按钮监听
41   - private ClickListener rightClickListener; //右边按钮监听
42   -
43   - public void setTypeLisenter(TypeListener typeLisenter) {
44   - this.typeLisenter = typeLisenter;
45   - }
46   -
47   - public void setCaptureLisenter(CaptureListener captureLisenter) {
48   - this.captureLisenter = captureLisenter;
49   - }
50   -
51   - public void setReturnLisenter(ReturnListener returnListener) {
52   - this.returnListener = returnListener;
53   - }
54   -
55   - private CaptureButton btn_capture; //拍照按钮
56   - private TypeButton btn_confirm; //确认按钮
57   - private TypeButton btn_cancel; //取消按钮
58   - private ReturnButton btn_return; //返回按钮
59   - private ImageView iv_custom_left; //左边自定义按钮
60   - private ImageView iv_custom_right; //右边自定义按钮
61   - private TextView txt_tip; //提示文本
62   -
63   - private int layout_width;
64   - private int layout_height;
65   - private int button_size;
66   - private int iconLeft = 0;
67   - private int iconRight = 0;
68   -
69   - private boolean isFirst = true;
70   -
71   - public CaptureLayout(Context context) {
72   - this(context, null);
73   - }
74   -
75   - public CaptureLayout(Context context, AttributeSet attrs) {
76   - this(context, attrs, 0);
77   - }
78   -
79   - public CaptureLayout(Context context, AttributeSet attrs, int defStyleAttr) {
80   - super(context, attrs, defStyleAttr);
81   -
82   -
83   - // WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
84   - // DisplayMetrics outMetrics = new DisplayMetrics();
85   - // manager.getDefaultDisplay().getMetrics(outMetrics);
86   - if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
87   - layout_width = dip2px(250);
88   - // layout_width = outMetrics.widthPixels;
89   - } else {
90   - layout_width = dip2px(250);
91   - }
92   - // button_size = (int) (layout_width / 6f);
93   - // layout_height = button_size + (button_size / 5) * 2 + 100;
94   - layout_height = dip2px(100);
95   - button_size = dip2px(50);
96   - initView();
97   - initEvent();
98   - }
99   -
100   - @Override
101   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
102   - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
103   - setMeasuredDimension(layout_width, layout_height);
104   - }
105   -
106   - public void initEvent() {
107   - //默认Typebutton为隐藏
108   - iv_custom_right.setVisibility(GONE);
109   - btn_cancel.setVisibility(GONE);
110   - btn_confirm.setVisibility(GONE);
111   - }
112   -
113   - public void startTypeBtnAnimator() {
114   - if (checkErrorState()) return;
115   - //拍照录制结果后的动画
116   - if (this.iconLeft != 0)
117   - iv_custom_left.setVisibility(GONE);
118   - else
119   - btn_return.setVisibility(GONE);
120   - if (this.iconRight != 0)
121   - iv_custom_right.setVisibility(GONE);
122   - btn_capture.setVisibility(GONE);
123   - btn_cancel.setVisibility(VISIBLE);
124   - btn_confirm.setVisibility(VISIBLE);
125   - btn_cancel.setClickable(false);
126   - btn_confirm.setClickable(false);
127   - ObjectAnimator animator_cancel = ObjectAnimator.ofFloat(btn_cancel, "translationX", layout_width / 4, 0);
128   - ObjectAnimator animator_confirm = ObjectAnimator.ofFloat(btn_confirm, "translationX", -layout_width / 4, 0);
129   -
130   - AnimatorSet set = new AnimatorSet();
131   - set.playTogether(animator_cancel, animator_confirm);
132   - set.addListener(new AnimatorListenerAdapter() {
133   - @Override
134   - public void onAnimationEnd(Animator animation) {
135   - super.onAnimationEnd(animation);
136   - btn_cancel.setClickable(true);
137   - btn_confirm.setClickable(true);
138   - }
139   - });
140   - set.setDuration(200);
141   - set.start();
142   - }
143   - private void initView() {
144   - setWillNotDraw(false);
145   - //拍照按钮
146   - btn_capture = new CaptureButton(getContext(), button_size);
147   - LayoutParams btn_capture_param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
148   - btn_capture_param.gravity = Gravity.CENTER;
149   - // btn_capture_param.setMargins(0,0,0,dip2px(-4));
150   - btn_capture.setLayoutParams(btn_capture_param);
151   - btn_capture.setCaptureLisenter(new CaptureListener() {
152   - @Override
153   - public void takePictures() {
154   - btn_return.setClickable(false);
155   - if (captureLisenter != null) {
156   - captureLisenter.takePictures();
157   - }
158   - }
159   -
160   - @Override
161   - public void recordShort(long time) {
162   - btn_return.setClickable(true);
163   - if (captureLisenter != null) {
164   - captureLisenter.recordShort(time);
165   - }
166   - startAlphaAnimation();
167   - }
168   -
169   - @Override
170   - public void recordStart() {
171   - btn_return.setClickable(false);
172   - if (captureLisenter != null) {
173   - captureLisenter.recordStart();
174   - }
175   - startAlphaAnimation();
176   - }
177   -
178   - @Override
179   - public void recordEnd(long time) {
180   - if (captureLisenter != null) {
181   - captureLisenter.recordEnd(time);
182   - }
183   - startAlphaAnimation();
184   - startTypeBtnAnimator();
185   - }
186   -
187   - @Override
188   - public void recordZoom(float zoom) {
189   - if (captureLisenter != null) {
190   - captureLisenter.recordZoom(zoom);
191   - }
192   - }
193   -
194   - @Override
195   - public void recordError() {
196   - if (captureLisenter != null) {
197   - captureLisenter.recordError();
198   - }
199   - }
200   - });
201   -
202   - //取消按钮
203   - btn_cancel = new TypeButton(getContext(), TypeButton.TYPE_CANCEL, button_size);
204   - final LayoutParams btn_cancel_param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
205   - btn_cancel_param.gravity = Gravity.CENTER_VERTICAL;
206   - btn_cancel_param.setMargins(dip2px(200), 0, 0, 0);
207   - btn_cancel.setLayoutParams(btn_cancel_param);
208   - btn_cancel.setOnClickListener(new OnClickListener() {
209   - @Override
210   - public void onClick(View view) {
211   - if (typeLisenter != null) {
212   - typeLisenter.cancel();
213   - }
214   - startAlphaAnimation();
215   -// resetCaptureLayout();
216   - }
217   - });
218   -
219   - //确认按钮
220   - btn_confirm = new TypeButton(getContext(), TypeButton.TYPE_CONFIRM, button_size);
221   - LayoutParams btn_confirm_param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
222   - btn_confirm_param.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
223   - btn_confirm_param.setMargins(0, 0, dip2px(200), 0);
224   - btn_confirm.setLayoutParams(btn_confirm_param);
225   - btn_confirm.setOnClickListener(new OnClickListener() {
226   - @Override
227   - public void onClick(View view) {
228   - if (typeLisenter != null) {
229   - typeLisenter.confirm();
230   - }
231   - startAlphaAnimation();
232   -// resetCaptureLayout();
233   - }
234   - });
235   -
236   - //返回按钮
237   - btn_return = new ReturnButton(getContext(), (int) (button_size / 2.5f));
238   - btn_return.setPadding(5,5,5,5);
239   - LayoutParams btn_return_param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
240   - btn_return_param.gravity = Gravity.CENTER_VERTICAL;
241   - btn_cancel_param.height = 100;
242   - btn_cancel_param.width = 100;
243   - btn_return_param.setMargins(layout_width / 6, 0, 0, dip2px(-4));
244   - btn_return.setLayoutParams(btn_return_param);
245   - btn_return.setOnClickListener(new OnClickListener() {
246   - @Override
247   - public void onClick(View v) {
248   - if (leftClickListener != null) {
249   - leftClickListener.onClick();
250   - }
251   - }
252   - });
253   - //左边自定义按钮
254   - iv_custom_left = new ImageView(getContext());
255   - LayoutParams iv_custom_param_left = new LayoutParams((int) (button_size / 2.5f), (int) (button_size / 2.5f));
256   - iv_custom_param_left.gravity = Gravity.CENTER_VERTICAL;
257   - iv_custom_param_left.setMargins(layout_width / 6, 0, 0, 0);
258   - iv_custom_left.setLayoutParams(iv_custom_param_left);
259   - iv_custom_left.setOnClickListener(new OnClickListener() {
260   - @Override
261   - public void onClick(View v) {
262   - if (leftClickListener != null) {
263   - leftClickListener.onClick();
264   - }
265   - }
266   - });
267   -
268   - //右边自定义按钮
269   - iv_custom_right = new ImageView(getContext());
270   - LayoutParams iv_custom_param_right = new LayoutParams((int) (button_size / 2.5f), (int) (button_size / 2.5f));
271   - iv_custom_param_right.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
272   - iv_custom_param_right.setMargins(0, 0, layout_width / 6, 0);
273   - iv_custom_right.setLayoutParams(iv_custom_param_right);
274   - iv_custom_right.setOnClickListener(new OnClickListener() {
275   - @Override
276   - public void onClick(View v) {
277   - if (rightClickListener != null) {
278   - rightClickListener.onClick();
279   - }
280   - }
281   - });
282   -
283   - txt_tip = new TextView(getContext());
284   - LayoutParams txt_param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
285   - txt_param.gravity = Gravity.CENTER_HORIZONTAL;
286   - txt_param.setMargins(0, 0, 0, 0);
287   - txt_tip.setPadding(0, 0, 0, 50);
288   - txt_tip.setTextColor(0xFFFFFFFF);
289   - txt_tip.setGravity(Gravity.CENTER);
290   - txt_tip.setLayoutParams(txt_param);
291   -
292   - this.addView(btn_capture);
293   - this.addView(btn_cancel);
294   - this.addView(btn_confirm);
295   - this.addView(btn_return);
296   - this.addView(iv_custom_left);
297   - this.addView(iv_custom_right);
298   - this.addView(txt_tip);
299   - }
300   -
301   - public static int dip2px(float dipValue) {
302   - float scale = Resources.getSystem().getDisplayMetrics().density;
303   - return (int) (dipValue * scale + 0.5F);
304   - }
305   -
306   -
307   - /**************************************************
308   - * 对外提供的API *
309   - **************************************************/
310   - public void resetCaptureLayout() {
311   - btn_capture.resetRecordAnim();
312   - btn_capture.resetState();
313   - btn_cancel.setVisibility(GONE);
314   - btn_confirm.setVisibility(GONE);
315   - btn_capture.setVisibility(VISIBLE);
316   - if (this.iconLeft != 0)
317   - iv_custom_left.setVisibility(VISIBLE);
318   - else {
319   - btn_return.setClickable(true);
320   - btn_return.setVisibility(VISIBLE);
321   - }
322   - if (this.iconRight != 0)
323   - iv_custom_right.setVisibility(VISIBLE);
324   - }
325   -
326   - private boolean checkErrorState() {
327   - if (isErrorState) {
328   - isErrorState = false;
329   - return true;
330   - }
331   - return false;
332   - }
333   -
334   - public void onError() {
335   - onError(false);
336   - }
337   -
338   - public void onError(boolean state) {
339   - isErrorState = state;
340   - btn_return.setClickable(true);
341   - }
342   -
343   - public void startAlphaAnimation() {
344   - if (isFirst) {
345   - ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip, "alpha", 1f, 0f);
346   - animator_txt_tip.setDuration(500);
347   - animator_txt_tip.start();
348   - isFirst = false;
349   - }
350   - }
351   -
352   - public void setTextWithAnimation(String tip) {
353   - txt_tip.setText(tip);
354   - ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip, "alpha", 0f, 1f, 1f, 0f);
355   - animator_txt_tip.setDuration(2500);
356   - animator_txt_tip.start();
357   - }
358   -
359   - public void setDuration(int duration) {
360   - btn_capture.setDuration(duration);
361   - }
362   -
363   - public void setButtonFeatures(int state) {
364   - if (state == BUTTON_STATE_BOTH) {
365   - txt_tip.setText("轻触拍照,长按摄像");
366   - } else if (state == BUTTON_STATE_ONLY_CAPTURE) {
367   - txt_tip.setText("轻触拍照");
368   - } else if (state == BUTTON_STATE_ONLY_RECORDER) {
369   - txt_tip.setText("长按摄像");
370   - }
371   - btn_capture.setButtonFeatures(state);
372   - }
373   -
374   - public void setTip(String tip) {
375   - txt_tip.setText(tip);
376   - }
377   -
378   - public void showTip() {
379   - txt_tip.setVisibility(VISIBLE);
380   - }
381   -
382   - public void setIconSrc(int iconLeft, int iconRight) {
383   - this.iconLeft = iconLeft;
384   - this.iconRight = iconRight;
385   - if (this.iconLeft != 0) {
386   - iv_custom_left.setImageResource(iconLeft);
387   - iv_custom_left.setVisibility(VISIBLE);
388   - btn_return.setVisibility(GONE);
389   - } else {
390   - iv_custom_left.setVisibility(GONE);
391   - btn_return.setClickable(true);
392   - btn_return.setVisibility(VISIBLE);
393   - }
394   - if (this.iconRight != 0) {
395   - iv_custom_right.setImageResource(iconRight);
396   - iv_custom_right.setVisibility(VISIBLE);
397   - } else {
398   - iv_custom_right.setVisibility(GONE);
399   - }
400   - }
401   -
402   - public void setLeftClickListener(ClickListener leftClickListener) {
403   - this.leftClickListener = leftClickListener;
404   - }
405   -
406   - public void setRightClickListener(ClickListener rightClickListener) {
407   - this.rightClickListener = rightClickListener;
408   - }
409   -}
core/base/src/main/java/com/cjt2325/cameralibrary/FoucsView.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.content.Context;
4   -import android.graphics.Canvas;
5   -import android.graphics.Paint;
6   -import android.util.AttributeSet;
7   -import android.view.View;
8   -
9   -import androidx.annotation.Nullable;
10   -
11   -import com.cjt2325.cameralibrary.util.ScreenUtils;
12   -
13   -/**
14   - * =====================================
15   - * 作 者: 陈嘉桐
16   - * 版 本:1.1.4
17   - * 创建日期:2017/4/26
18   - * 描 述:对焦框
19   - * =====================================
20   - */
21   -public class FoucsView extends View {
22   - private int size;
23   - private int center_x;
24   - private int center_y;
25   - private int length;
26   - private Paint mPaint;
27   -
28   - public FoucsView(Context context) {
29   - this(context, null);
30   - }
31   -
32   - public FoucsView(Context context, @Nullable AttributeSet attrs) {
33   - this(context, attrs, 0);
34   - }
35   -
36   - public FoucsView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
37   - super(context, attrs, defStyleAttr);
38   - this.size = ScreenUtils.getScreenWidth(context) / 4;
39   - mPaint = new Paint();
40   - mPaint.setAntiAlias(true);
41   - mPaint.setDither(true);
42   - mPaint.setColor(0xEE16AE16);
43   - mPaint.setStrokeWidth(4);
44   - mPaint.setStyle(Paint.Style.STROKE);
45   - }
46   -
47   - @Override
48   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
49   - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
50   - center_x = (int) (size / 2.0);
51   - center_y = (int) (size / 2.0);
52   - length = (int) (size / 2.0) - 2;
53   - setMeasuredDimension(size, size);
54   - }
55   -
56   - @Override
57   - protected void onDraw(Canvas canvas) {
58   - super.onDraw(canvas);
59   - canvas.drawRect(center_x - length, center_y - length, center_x + length, center_y + length, mPaint);
60   - canvas.drawLine(2, getHeight() / 2, size / 10, getHeight() / 2, mPaint);
61   - canvas.drawLine(getWidth() - 2, getHeight() / 2, getWidth() - size / 10, getHeight() / 2, mPaint);
62   - canvas.drawLine(getWidth() / 2, 2, getWidth() / 2, size / 10, mPaint);
63   - canvas.drawLine(getWidth() / 2, getHeight() - 2, getWidth() / 2, getHeight() - size / 10, mPaint);
64   - }
65   -}
core/base/src/main/java/com/cjt2325/cameralibrary/JCameraView.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.animation.AnimatorSet;
4   -import android.animation.ObjectAnimator;
5   -import android.content.Context;
6   -import android.content.res.TypedArray;
7   -import android.graphics.Bitmap;
8   -import android.hardware.Camera;
9   -import android.media.AudioManager;
10   -import android.media.MediaPlayer;
11   -import android.os.Build;
12   -import android.util.AttributeSet;
13   -import android.util.Log;
14   -import android.util.TypedValue;
15   -import android.view.Gravity;
16   -import android.view.LayoutInflater;
17   -import android.view.MotionEvent;
18   -import android.view.SurfaceHolder;
19   -import android.view.View;
20   -import android.view.ViewGroup;
21   -import android.view.WindowManager;
22   -import android.widget.FrameLayout;
23   -import android.widget.ImageView;
24   -import android.widget.VideoView;
25   -
26   -import androidx.annotation.RequiresApi;
27   -
28   -import com.cjt2325.cameralibrary.listener.CaptureListener;
29   -import com.cjt2325.cameralibrary.listener.ClickListener;
30   -import com.cjt2325.cameralibrary.listener.ErrorListener;
31   -import com.cjt2325.cameralibrary.listener.JCameraListener;
32   -import com.cjt2325.cameralibrary.listener.TypeListener;
33   -import com.cjt2325.cameralibrary.state.CameraMachine;
34   -import com.cjt2325.cameralibrary.util.FileUtil;
35   -import com.cjt2325.cameralibrary.util.LogUtil;
36   -import com.cjt2325.cameralibrary.util.ScreenUtils;
37   -import com.cjt2325.cameralibrary.view.CameraView;
38   -import com.cnlive.libs.base.util.AlertUtil;
39   -import com.cnlive.libs.base.util.ScreenUtil;
40   -import com.cnlive.strike.base.R;
41   -
42   -
43   -/**
44   - * =====================================
45   - * 作 者: 陈嘉桐
46   - * 版 本:1.0.4
47   - * 创建日期:2017/4/25
48   - * 描 述:
49   - * =====================================
50   - */
51   -public class JCameraView extends FrameLayout implements CameraInterface.CameraOpenOverCallback, SurfaceHolder
52   - .Callback, CameraView {
53   -// private static final String TAG = "JCameraView";
54   -
55   - //Camera状态机
56   - private CameraMachine machine;
57   -
58   - //闪关灯状态
59   - // private static final int TYPE_FLASH_AUTO = 0x021;
60   - private static final int TYPE_FLASH_ON = 0x022;
61   - private static final int TYPE_FLASH_OFF = 0x023;
62   - private int type_flash = TYPE_FLASH_OFF;
63   -
64   - //拍照浏览时候的类型
65   - public static final int TYPE_PICTURE = 0x001;
66   - public static final int TYPE_VIDEO = 0x002;
67   - public static final int TYPE_SHORT = 0x003;
68   - public static final int TYPE_DEFAULT = 0x004;
69   -
70   - //录制视频比特率
71   - public static final int MEDIA_QUALITY_HIGH = 20 * 100000;
72   - public static final int MEDIA_QUALITY_MIDDLE = 16 * 100000;
73   - public static final int MEDIA_QUALITY_LOW = 12 * 100000;
74   - public static final int MEDIA_QUALITY_POOR = 8 * 100000;
75   - public static final int MEDIA_QUALITY_FUNNY = 4 * 100000;
76   - public static final int MEDIA_QUALITY_DESPAIR = 2 * 100000;
77   - public static final int MEDIA_QUALITY_SORRY = 1 * 80000;
78   -
79   -
80   - public static final int BUTTON_STATE_ONLY_CAPTURE = 0x101; //只能拍照
81   - public static final int BUTTON_STATE_ONLY_RECORDER = 0x102; //只能录像
82   - public static final int BUTTON_STATE_BOTH = 0x103; //两者都可以
83   -
84   -
85   - //回调监听
86   - private JCameraListener jCameraLisenter;
87   - private ClickListener leftClickListener;
88   - private ClickListener rightClickListener;
89   -
90   - private VideoView mVideoView;
91   - private ImageView mPhoto;
92   - private ImageView mSwitchCamera;
93   - private ImageView mFlashLamp;
94   - private CaptureLayout mCaptureLayout;
95   - private FoucsView mFoucsView;
96   - private MediaPlayer mMediaPlayer;
97   -
98   - private int layout_width;
99   - private float screenProp = 0f;
100   -
101   - private Bitmap captureBitmap; //捕获的图片
102   - private String videoUrl; //视频URL
103   -
104   -
105   - //切换摄像头按钮的参数
106   - private int iconSize = 0; //图标大小
107   - private int iconMargin = 0; //右上边距
108   - private int iconSrc = 0; //图标资源
109   - private int iconLeft = 0; //左图标
110   - private int iconRight = 0; //右图标
111   - private int duration = 0; //录制时间
112   -
113   - //缩放梯度
114   - private int zoomGradient = 0;
115   -
116   - private boolean firstTouch = true;
117   - private float firstTouchLength = 0;
118   - private boolean recordEnd = false;
119   - private long lastClick;
120   -
121   - public JCameraView(Context context) {
122   - this(context, null);
123   - }
124   -
125   - public JCameraView(Context context, AttributeSet attrs) {
126   - this(context, attrs, 0);
127   - }
128   -
129   - public JCameraView(Context context, AttributeSet attrs, int defStyleAttr) {
130   - super(context, attrs, defStyleAttr);
131   - //get AttributeSet
132   - TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.JCameraView, defStyleAttr, 0);
133   - iconSize = a.getDimensionPixelSize(R.styleable.JCameraView_iconSize, (int) TypedValue.applyDimension(
134   - TypedValue.COMPLEX_UNIT_SP, 35, getResources().getDisplayMetrics()));
135   - iconMargin = a.getDimensionPixelSize(R.styleable.JCameraView_iconMargin, (int) TypedValue.applyDimension(
136   - TypedValue.COMPLEX_UNIT_SP, 15, getResources().getDisplayMetrics()));
137   - // iconSrc = a.getResourceId(R.styleable.JCameraView_iconSrc, R.drawable.fb_xiangji);
138   - iconLeft = a.getResourceId(R.styleable.JCameraView_iconLeft, 0);
139   - iconRight = a.getResourceId(R.styleable.JCameraView_iconRight, 0);
140   - duration = a.getInteger(R.styleable.JCameraView_duration_max, 10 * 1000); //没设置默认为10s
141   - a.recycle();
142   - initData();
143   - initView();
144   - }
145   -
146   - private void initData() {
147   - layout_width = ScreenUtils.getScreenWidth(getContext());
148   - //缩放梯度
149   - zoomGradient = (int) (layout_width / 16f);
150   - LogUtil.i("zoom = " + zoomGradient);
151   - machine = new CameraMachine(getContext(), this, this);
152   - }
153   -
154   - public int getScreenWidth() {
155   - WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
156   - return wm == null ? 0 : wm.getDefaultDisplay().getWidth();
157   - }
158   -
159   - private long lastClickTime = 0L;
160   - private static final int FAST_CLICK_DELAY_TIME = 1000; // 快速点击间隔
161   -
162   - private void initView() {
163   - int cameraCount = Camera.getNumberOfCameras();
164   - setWillNotDraw(false);
165   - int[] cid = {1};
166   - View view = LayoutInflater.from(getContext()).inflate(R.layout.camera_view, this);
167   - mVideoView = (VideoView) view.findViewById(R.id.video_preview);
168   - mVideoView.setLayoutParams(new LayoutParams(getScreenWidth(), getScreenWidth() * 1920 / 1080));
169   - mPhoto = (ImageView) view.findViewById(R.id.image_photo);
170   - mSwitchCamera = (ImageView) view.findViewById(R.id.image_switch);
171   - mSwitchCamera.setImageResource(R.drawable.fb_xiangji);
172   - mFlashLamp = (ImageView) view.findViewById(R.id.image_flash);
173   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
174   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
175   - if (System.currentTimeMillis() - lastClick <= 4000) {
176   - return;
177   - } else {
178   - mFlashLamp.setOnClickListener(new OnClickListener() {
179   - @Override
180   - public void onClick(View v) {
181   - if (CameraInterface.getInstance().getSelectedCamera() == Camera.CameraInfo.CAMERA_FACING_FRONT)
182   - return;
183   - type_flash++;
184   - if (type_flash > 0x023) {
185   - type_flash = 0x022;
186   - }
187   - if (type_flash == TYPE_FLASH_ON) {
188   - mFlashLamp.setImageResource(R.drawable.ic_flash_on);
189   - machine.flash(Camera.Parameters.FLASH_MODE_ON);
190   - } else if (type_flash == TYPE_FLASH_OFF) {
191   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
192   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
193   - } else {
194   - AlertUtil.showDeftToast(v.getContext(), "闪光灯打开失败");
195   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
196   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
197   - }
198   - }
199   - });
200   - }
201   - lastClick = System.currentTimeMillis();
202   - if (cameraCount == 1) {
203   - mSwitchCamera.setVisibility(GONE);
204   - mSwitchCamera.setClickable(false);
205   - } else {
206   - mSwitchCamera.setVisibility(VISIBLE);
207   - mSwitchCamera.setClickable(true);
208   - mSwitchCamera.setImageResource(R.drawable.fb_xiangji);
209   - //切换摄像头
210   - long[] mHits = new long[3];
211   - mSwitchCamera.setOnClickListener(new OnClickListener() {
212   - @Override
213   - public void onClick(View v) {
214   - if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME) {
215   - } else {
216   - if (machine.swtich(mVideoView.getHolder(), screenProp)) {
217   - if (cid[0] == 1) {
218   - // mFlashLamp.setVisibility(INVISIBLE);
219   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
220   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
221   - cid[0] = 1;
222   - } else if (cid[0] == 0) {
223   - mFlashLamp.setVisibility(VISIBLE);
224   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
225   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
226   - cid[0] = 0;
227   - }
228   - } else {
229   - mCaptureLayout.onError();
230   - }
231   - }
232   - lastClickTime = System.currentTimeMillis();
233   -
234   - }
235   - });
236   - }
237   - mCaptureLayout = (CaptureLayout) view.findViewById(R.id.capture_layout);
238   - mCaptureLayout.setDuration(duration);
239   - mCaptureLayout.setIconSrc(iconLeft, iconRight);
240   - mFoucsView = (FoucsView) view.findViewById(R.id.fouce_view);
241   - mVideoView.getHolder().addCallback(this);
242   - //拍照 录像
243   - mCaptureLayout.setCaptureLisenter(new CaptureListener() {
244   - @Override
245   - public void takePictures() {
246   - if (machine.capture()) {
247   - mSwitchCamera.setVisibility(INVISIBLE);
248   - recordEnd = true;
249   - mFlashLamp.setVisibility(INVISIBLE);
250   - } else {
251   - AlertUtil.showDeftToast(getContext(), "相机拍摄失败");
252   - Log.e("Camera", "相机拍摄失败.");
253   - mCaptureLayout.onError();
254   - recordEnd = true;
255   - }
256   - }
257   -
258   - @Override
259   - public void recordStart() {
260   - recordEnd = false;
261   - if (machine.record(mVideoView.getHolder().getSurface(), screenProp,getContext())) {
262   - mSwitchCamera.setVisibility(INVISIBLE);
263   - mFlashLamp.setVisibility(INVISIBLE);
264   - } else {
265   - AlertUtil.showDeftToast(getContext(), "相机开启失败");
266   - Log.e("Camera", "相机开启失败.");
267   - mCaptureLayout.onError(true);
268   - }
269   - }
270   -
271   - @Override
272   - public void recordShort(final long time) {
273   - mCaptureLayout.setTextWithAnimation("录制时间过短");
274   - mSwitchCamera.setVisibility(VISIBLE);
275   - mFlashLamp.setVisibility(VISIBLE);
276   - postDelayed(new Runnable() {
277   - @Override
278   - public void run() {
279   - machine.stopRecord(true, time);
280   - }
281   - }, 1500 - time);
282   - }
283   -
284   - @Override
285   - public void recordEnd(long time) {
286   - machine.stopRecord(false, time);
287   - recordEnd = true;
288   - if (jCameraLisenter != null) {
289   - jCameraLisenter.recordEnd(videoUrl, duration);
290   - }
291   - }
292   -
293   - @Override
294   - public void recordZoom(float zoom) {
295   - LogUtil.i("recordZoom");
296   - machine.zoom(zoom, CameraInterface.TYPE_RECORDER);
297   - }
298   -
299   - @Override
300   - public void recordError() {
301   - if (errorLisenter != null) {
302   - errorLisenter.AudioPermissionError();
303   - }
304   - }
305   - });
306   - //确认 取消
307   - mCaptureLayout.setTypeLisenter(new TypeListener() {
308   - @Override
309   - public void cancel() {
310   - machine.confirm();
311   - }
312   -
313   - @Override
314   - public void confirm() {
315   - machine.cancle(mVideoView.getHolder(), screenProp);
316   - stopVideo();
317   - recordEnd = false;
318   - mFlashLamp.setImageResource(R.drawable.ic_flash_off);
319   - machine.flash(Camera.Parameters.FLASH_MODE_OFF);
320   - }
321   - });
322   - //退出
323   -// mCaptureLayout.setReturnLisenter(new ReturnListener() {
324   -// @Override
325   -// public void onReturn() {
326   -// if (jCameraLisenter != null) {
327   -// jCameraLisenter.quit();
328   -// }
329   -// }
330   -// });
331   - mCaptureLayout.setLeftClickListener(new ClickListener() {
332   - @Override
333   - public void onClick() {
334   - if (leftClickListener != null) {
335   - leftClickListener.onClick();
336   - }
337   - }
338   - });
339   - mCaptureLayout.setRightClickListener(new ClickListener() {
340   - @Override
341   - public void onClick() {
342   - if (rightClickListener != null) {
343   - rightClickListener.onClick();
344   - }
345   - }
346   - });
347   - }
348   -
349   - public void setDuration(int duration_ss) {
350   - if (mCaptureLayout != null) mCaptureLayout.setDuration(duration = duration_ss);
351   - }
352   -
353   - @Override
354   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
355   - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
356   - float widthSize = mVideoView.getMeasuredWidth();
357   - float heightSize = mVideoView.getMeasuredHeight();
358   - if (screenProp == 0) {
359   - screenProp = heightSize / widthSize;
360   - }
361   - }
362   -
363   - @Override
364   - public void cameraHasOpened() {
365   - CameraInterface.getInstance().doStartPreview(mVideoView.getHolder(), screenProp);
366   - }
367   -
368   - //生命周期onResume
369   - public void onResume() {
370   - LogUtil.i("JCameraView onResume");
371   - resetState(TYPE_DEFAULT); //重置状态
372   - CameraInterface.getInstance().registerSensorManager(getContext());
373   - CameraInterface.getInstance().setSwitchView(mSwitchCamera, mFlashLamp);
374   - machine.setDefaultState();
375   - machine.start(mVideoView.getHolder(), screenProp);
376   - }
377   -
378   - //生命周期onPause
379   - public void onStop() {
380   - LogUtil.i("JCameraView onPause");
381   - stopVideo();
382   - resetState(TYPE_PICTURE);
383   - CameraInterface.getInstance().isPreview(false);
384   - CameraInterface.getInstance().unregisterSensorManager(getContext());
385   - }
386   -
387   - //SurfaceView生命周期
388   - @Override
389   - public void surfaceCreated(SurfaceHolder holder) {
390   - LogUtil.i("JCameraView SurfaceCreated");
391   - if (recordEnd) {
392   - if (mMediaPlayer != null) {
393   - mMediaPlayer.setDisplay(holder);
394   - mMediaPlayer.start();
395   - }
396   - return;
397   - }
398   - new Thread() {
399   - @Override
400   - public void run() {
401   - CameraInterface.getInstance().doOpenCamera(JCameraView.this);
402   - }
403   - }.start();
404   - }
405   -
406   - @Override
407   - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
408   - }
409   -
410   - @Override
411   - public void surfaceDestroyed(SurfaceHolder holder) {
412   - LogUtil.i("JCameraView SurfaceDestroyed");
413   - if (recordEnd) {
414   - if (mMediaPlayer != null)
415   - mMediaPlayer.setDisplay(null);
416   - pausePlayer();
417   - return;
418   - }
419   - CameraInterface.getInstance().doDestroyCamera();
420   -
421   - }
422   -
423   -
424   - @Override
425   - public boolean onTouchEvent(MotionEvent event) {
426   - switch (event.getAction()) {
427   - case MotionEvent.ACTION_DOWN:
428   - if (event.getPointerCount() == 1) {
429   - //显示对焦指示器
430   - setFocusViewWidthAnimation(event.getX(), event.getY());
431   - }
432   - if (event.getPointerCount() == 2) {
433   - Log.i("CJT", "ACTION_DOWN = " + 2);
434   - }
435   - break;
436   - case MotionEvent.ACTION_MOVE:
437   - if (event.getPointerCount() == 1) {
438   - firstTouch = true;
439   - }
440   - if (event.getPointerCount() == 2) {
441   - //第一个点
442   - float point_1_X = event.getX(0);
443   - float point_1_Y = event.getY(0);
444   - //第二个点
445   - float point_2_X = event.getX(1);
446   - float point_2_Y = event.getY(1);
447   -
448   - float result = (float) Math.sqrt(Math.pow(point_1_X - point_2_X, 2) + Math.pow(point_1_Y -
449   - point_2_Y, 2));
450   -
451   - if (firstTouch) {
452   - firstTouchLength = result;
453   - firstTouch = false;
454   - }
455   - if ((int) (result - firstTouchLength) / zoomGradient != 0) {
456   - firstTouch = true;
457   - machine.zoom(result - firstTouchLength, CameraInterface.TYPE_CAPTURE);
458   - }
459   -// Log.i("CJT", "result = " + (result - firstTouchLength));
460   - }
461   - break;
462   - case MotionEvent.ACTION_UP:
463   - firstTouch = true;
464   - break;
465   - }
466   - return true;
467   - }
468   -
469   - //对焦框指示器动画
470   - private void setFocusViewWidthAnimation(float x, float y) {
471   - machine.foucs(x, y, new CameraInterface.FocusCallback() {
472   - @Override
473   - public void focusSuccess() {
474   - mFoucsView.setVisibility(INVISIBLE);
475   - }
476   - });
477   - }
478   -
479   - private void updateVideoViewSize(float videoWidth, float videoHeight) {
480   - if (videoWidth > videoHeight) {
481   - LayoutParams videoViewParam;
482   - int height = (int) ((videoHeight / videoWidth) * getWidth());
483   - videoViewParam = new LayoutParams(LayoutParams.MATCH_PARENT, height);
484   - videoViewParam.gravity = Gravity.CENTER;
485   - mVideoView.setLayoutParams(videoViewParam);
486   - }
487   - }
488   -
489   - /**************************************************
490   - * 对外提供的API *
491   - **************************************************/
492   -
493   - public void setSaveVideoPath(String path) {
494   - CameraInterface.getInstance().setSaveVideoPath(path);
495   - }
496   -
497   -
498   - public void setJCameraLisenter(JCameraListener jCameraLisenter) {
499   - this.jCameraLisenter = jCameraLisenter;
500   - }
501   -
502   -
503   - private ErrorListener errorLisenter;
504   -
505   - //启动Camera错误回调
506   - public void setErrorLisenter(ErrorListener errorLisenter) {
507   - this.errorLisenter = errorLisenter;
508   - CameraInterface.getInstance().setErrorLinsenter(errorLisenter);
509   - }
510   -
511   - //设置CaptureButton功能(拍照和录像)
512   - public void setFeatures(int state) {
513   - this.mCaptureLayout.setButtonFeatures(state);
514   - }
515   -
516   - //设置录制质量
517   - public void setMediaQuality(int quality) {
518   - CameraInterface.getInstance().setMediaQuality(quality);
519   - }
520   -
521   - public void setButtonVisiblity() {
522   - mCaptureLayout.setVisibility(GONE);
523   - }
524   -
525   - @Override
526   - public void resetState(int type) {
527   - switch (type) {
528   - case TYPE_VIDEO:
529   - stopVideo(); //停止播放
530   - //初始化VideoView
531   - FileUtil.deleteFile(videoUrl);
532   - mVideoView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
533   - machine.start(mVideoView.getHolder(), screenProp);
534   - break;
535   - case TYPE_PICTURE:
536   - mPhoto.setVisibility(INVISIBLE);
537   - break;
538   - case TYPE_SHORT:
539   - break;
540   - case TYPE_DEFAULT:
541   - mVideoView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
542   - break;
543   - }
544   - mSwitchCamera.setVisibility(VISIBLE);
545   - mFlashLamp.setVisibility(VISIBLE);
546   - mCaptureLayout.resetCaptureLayout();
547   - }
548   -
549   - @Override
550   - public void confirmState(int type) {
551   - switch (type) {
552   - case TYPE_VIDEO:
553   - int duration = mMediaPlayer.getDuration();
554   - stopVideo(); //停止播放
555   - mVideoView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
556   - machine.start(mVideoView.getHolder(), screenProp);
557   - if (jCameraLisenter != null) {
558   - jCameraLisenter.recordSuccess(videoUrl, duration);
559   - }
560   - break;
561   - case TYPE_PICTURE:
562   - mPhoto.setVisibility(INVISIBLE);
563   - if (jCameraLisenter != null) {
564   - jCameraLisenter.captureSuccess(captureBitmap);
565   - }
566   - break;
567   - case TYPE_SHORT:
568   - break;
569   - case TYPE_DEFAULT:
570   - break;
571   - }
572   - mCaptureLayout.resetCaptureLayout();
573   - }
574   -
575   - @Override
576   - public void showPicture(Bitmap bitmap, boolean isVertical) {
577   - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
578   - ViewGroup.LayoutParams layoutParams = mPhoto.getLayoutParams();
579   - layoutParams.width = ScreenUtil.getScreenWidth(getContext());
580   - layoutParams.height = ScreenUtil.getScreenHeight(getContext());
581   - mPhoto.setLayoutParams(layoutParams);
582   - } else {
583   - if (isVertical) {
584   - mPhoto.setScaleType(ImageView.ScaleType.FIT_XY);
585   - } else {
586   - mPhoto.setScaleType(ImageView.ScaleType.FIT_CENTER);
587   - }
588   - }
589   - captureBitmap = bitmap;
590   - mPhoto.setVisibility(VISIBLE);
591   - mPhoto.setImageBitmap(captureBitmap);
592   -
593   - mCaptureLayout.startAlphaAnimation();
594   - mCaptureLayout.startTypeBtnAnimator();
595   - }
596   -
597   - @Override
598   - public void playVideo(final String url) {
599   - videoUrl = url;
600   - new Thread(new Runnable() {
601   - @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
602   - @Override
603   - public void run() {
604   - try {
605   - if (mMediaPlayer == null) {
606   - mMediaPlayer = new MediaPlayer();
607   - } else {
608   - mMediaPlayer.reset();
609   - }
610   - mMediaPlayer.setDataSource(url);
611   - mMediaPlayer.setDisplay(mVideoView.getHolder());
612   - mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
613   - mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
614   - mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer
615   - .OnVideoSizeChangedListener() {
616   - @Override
617   - public void
618   - onVideoSizeChanged(MediaPlayer mp, int width, int height) {
619   - updateVideoViewSize(mMediaPlayer.getVideoWidth(), mMediaPlayer
620   - .getVideoHeight());
621   - }
622   - });
623   - mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
624   - @Override
625   - public void onPrepared(MediaPlayer mp) {
626   - mMediaPlayer.start();
627   - }
628   - });
629   - mMediaPlayer.setLooping(true);
630   - mMediaPlayer.prepare();
631   - } catch (Exception e) {
632   - Log.e("MediaPlayer", "", e);
633   - }
634   - }
635   - }).start();
636   - }
637   -
638   - @Override
639   - public void stopVideo() {
640   - if (mMediaPlayer != null) {
641   - mMediaPlayer.stop();
642   - mMediaPlayer.release();
643   - mMediaPlayer = null;
644   - }
645   - }
646   -
647   - @Override
648   - public void setTip(String tip) {
649   - mCaptureLayout.setTip(tip);
650   - }
651   -
652   - @Override
653   - public void startPreviewCallback() {
654   - LogUtil.i("startPreviewCallback");
655   - handlerFoucs(mFoucsView.getWidth() / 2, mFoucsView.getHeight() / 2);
656   - }
657   -
658   - @Override
659   - public boolean handlerFoucs(float x, float y) {
660   - if (y > mCaptureLayout.getTop()) {
661   - return false;
662   - }
663   - mFoucsView.setVisibility(VISIBLE);
664   - if (x < mFoucsView.getWidth() / 2) {
665   - x = mFoucsView.getWidth() / 2;
666   - }
667   - if (x > layout_width - mFoucsView.getWidth() / 2) {
668   - x = layout_width - mFoucsView.getWidth() / 2;
669   - }
670   - if (y < mFoucsView.getWidth() / 2) {
671   - y = mFoucsView.getWidth() / 2;
672   - }
673   - if (y > mCaptureLayout.getTop() - mFoucsView.getWidth() / 2) {
674   - y = mCaptureLayout.getTop() - mFoucsView.getWidth() / 2;
675   - }
676   - mFoucsView.setX(x - mFoucsView.getWidth() / 2);
677   - mFoucsView.setY(y - mFoucsView.getHeight() / 2);
678   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(mFoucsView, "scaleX", 1, 0.6f);
679   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(mFoucsView, "scaleY", 1, 0.6f);
680   - ObjectAnimator alpha = ObjectAnimator.ofFloat(mFoucsView, "alpha", 1f, 0.4f, 1f, 0.4f, 1f, 0.4f, 1f);
681   - AnimatorSet animSet = new AnimatorSet();
682   - animSet.play(scaleX).with(scaleY).before(alpha);
683   - animSet.setDuration(400);
684   - animSet.start();
685   - return true;
686   - }
687   -
688   - @Override
689   - public void pausePlayer() {
690   - if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
691   - mMediaPlayer.pause();
692   - }
693   - }
694   -
695   - @Override
696   - public void resumePlayer() {
697   - if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
698   - mMediaPlayer.start();
699   - }
700   - }
701   -
702   - public void setLeftClickListener(ClickListener clickListener) {
703   - this.leftClickListener = clickListener;
704   - }
705   -
706   - public void setRightClickListener(ClickListener clickListener) {
707   - this.rightClickListener = clickListener;
708   - }
709   -
710   - public void onDestroy() {
711   - if (recordEnd) {
712   - CameraInterface.getInstance().doDestroyCamera();
713   - }
714   - if (machine != null) machine.onDestroy();
715   - }
716   -}
core/base/src/main/java/com/cjt2325/cameralibrary/ReturnButton.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.content.Context;
4   -import android.graphics.Canvas;
5   -import android.graphics.Paint;
6   -import android.graphics.Path;
7   -import android.view.View;
8   -
9   -/**
10   - * =====================================
11   - * 作 者: 陈嘉桐 445263848@qq.com
12   - * 版 本:1.0.4
13   - * 创建日期:2017/4/26
14   - * 描 述:向下箭头的退出按钮
15   - * =====================================
16   - */
17   -public class ReturnButton extends View {
18   -
19   - private int size;
20   -
21   - private int center_X;
22   - private int center_Y;
23   - private float strokeWidth;
24   -
25   - private Paint paint;
26   - Path path;
27   -
28   - public ReturnButton(Context context, int size) {
29   - this(context);
30   - this.size = size;
31   - center_X = size / 2;
32   - center_Y = size / 2;
33   -
34   - strokeWidth = size / 15f;
35   -
36   - paint = new Paint();
37   - paint.setAntiAlias(true);
38   - paint.setColor(0xffffa300);
39   - paint.setStyle(Paint.Style.STROKE);
40   - paint.setStrokeWidth(strokeWidth);
41   -
42   - path = new Path();
43   - }
44   -
45   - public ReturnButton(Context context) {
46   - super(context);
47   - }
48   -
49   - @Override
50   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
51   - setMeasuredDimension(size, size / 2);
52   - }
53   -
54   - @Override
55   - protected void onDraw(Canvas canvas) {
56   - super.onDraw(canvas);
57   - path.moveTo(strokeWidth, strokeWidth/2);
58   - path.lineTo(center_X, center_Y - strokeWidth/2);
59   - path.lineTo(size - strokeWidth, strokeWidth/2);
60   -
61   - canvas.drawPath(path, paint);
62   - }
63   -}
core/base/src/main/java/com/cjt2325/cameralibrary/TypeButton.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary;
2   -
3   -import android.content.Context;
4   -import android.widget.ImageView;
5   -
6   -import com.cnlive.strike.base.R;
7   -
8   -
9   -/**
10   - * =====================================
11   - * 作 者: 陈嘉桐 445263848@qq.com
12   - * 版 本:1.0.4
13   - * 创建日期:2017/4/26
14   - * 描 述:拍照或录制完成后弹出的确认和返回按钮
15   - * =====================================
16   - */
17   -public class TypeButton extends ImageView {
18   - public static final int TYPE_CANCEL = 0x001;
19   - public static final int TYPE_CONFIRM = 0x002;
20   -// private int button_type;
21   - private int button_size;
22   -
23   -// private float center_X;
24   -// private float center_Y;
25   -// private float button_radius;
26   -
27   -// private Paint mPaint;
28   -// private Path path;
29   -// private float strokeWidth;
30   -
31   - private float index;
32   -// private RectF rectF;
33   -
34   - public TypeButton(Context context, int type, int size) {
35   - super(context);
36   - if (type == TYPE_CANCEL) {
37   - setImageResource(R.drawable.fb_wancheng);
38   - }
39   - if (type == TYPE_CONFIRM){
40   - setImageResource(R.drawable.fb_chongpai);
41   - }
42   -// this.button_type = type;
43   - button_size = size;
44   -// button_radius = size / 2.0f;
45   -// center_X = size / 2.0f;
46   -// center_Y = size / 2.0f;
47   -
48   -// mPaint = new Paint();
49   -// path = new Path();
50   -// strokeWidth = size / 50f;
51   -// index = button_size / 12f;
52   -// rectF = new RectF(center_X, center_Y - index, center_X + index * 2, center_Y + index);
53   - }
54   -
55   - @Override
56   - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
57   - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
58   - setMeasuredDimension(button_size, button_size);
59   - }
60   -
61   -// @Override
62   -// protected void onDraw(Canvas canvas) {
63   -// super.onDraw(canvas);
64   -// //如果类型为取消,则绘制内部为返回箭头
65   -// if (button_type == TYPE_CANCEL) {
66   -// mPaint.setAntiAlias(true);
67   -// mPaint.setColor(0xEEDCDCDC);
68   -// mPaint.setStyle(Paint.Style.FILL);
69   -// canvas.drawCircle(center_X, center_Y, button_radius, mPaint);
70   -//
71   -// mPaint.setColor(Color.BLACK);
72   -// mPaint.setStyle(Paint.Style.STROKE);
73   -// mPaint.setStrokeWidth(strokeWidth);
74   -//
75   -// path.moveTo(center_X - index / 7, center_Y + index);
76   -// path.lineTo(center_X + index, center_Y + index);
77   -//
78   -// path.arcTo(rectF, 90, -180);
79   -// path.lineTo(center_X - index, center_Y - index);
80   -// canvas.drawPath(path, mPaint);
81   -// mPaint.setStyle(Paint.Style.FILL);
82   -// path.reset();
83   -// path.moveTo(center_X - index, (float) (center_Y - index * 1.5));
84   -// path.lineTo(center_X - index, (float) (center_Y - index / 2.3));
85   -// path.lineTo((float) (center_X - index * 1.6), center_Y - index);
86   -// path.close();
87   -// canvas.drawPath(path, mPaint);
88   -//
89   -// }
90   -// //如果类型为确认,则绘制绿色勾
91   -// if (button_type == TYPE_CONFIRM) {
92   -// mPaint.setAntiAlias(true);
93   -// mPaint.setColor(0xFFFFFFFF);
94   -// mPaint.setStyle(Paint.Style.FILL);
95   -// canvas.drawCircle(center_X, center_Y, button_radius, mPaint);
96   -// mPaint.setAntiAlias(true);
97   -// mPaint.setStyle(Paint.Style.STROKE);
98   -// mPaint.setColor(0xFF00CC00);
99   -// mPaint.setStrokeWidth(strokeWidth);
100   -//
101   -// path.moveTo(center_X - button_size / 6f, center_Y);
102   -// path.lineTo(center_X - button_size / 21.2f, center_Y + button_size / 7.7f);
103   -// path.lineTo(center_X + button_size / 4.0f, center_Y - button_size / 8.5f);
104   -// path.lineTo(center_X - button_size / 21.2f, center_Y + button_size / 9.4f);
105   -// path.close();
106   -// canvas.drawPath(path, mPaint);
107   -// }
108   -// }
109   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/CaptureListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * create by CJT2325
5   - * 445263848@qq.com.
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   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/ClickListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.9
7   - * 创建日期:2017/10/7
8   - * 描 述:
9   - * =====================================
10   - */
11   -public interface ClickListener {
12   - void onClick();
13   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/ErrorListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.4
7   - * 创建日期:2017/6/5
8   - * 描 述:
9   - * =====================================
10   - */
11   -public interface ErrorListener {
12   - void onError();
13   - void AudioPermissionError();
14   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/JCameraListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -import android.graphics.Bitmap;
4   -
5   -/**
6   - * =====================================
7   - * 作 者: 陈嘉桐
8   - * 版 本:1.1.4
9   - * 创建日期:2017/4/26
10   - * 描 述:
11   - * =====================================
12   - */
13   -public interface JCameraListener {
14   -
15   - void captureSuccess(Bitmap bitmap);
16   -
17   - void recordSuccess(String url, int duration);
18   -
19   - void recordEnd(String url, int duration);
20   -
21   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/ResultListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.4
7   - * 创建日期:2017/9/8
8   - * 描 述:
9   - * =====================================
10   - */
11   -public interface ResultListener {
12   - void callback();
13   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/ReturnListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.4
7   - * 创建日期:2017/4/26
8   - * 描 述:
9   - * =====================================
10   - */
11   -public interface ReturnListener {
12   - void onReturn();
13   -}
core/base/src/main/java/com/cjt2325/cameralibrary/listener/TypeListener.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.listener;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.4
7   - * 创建日期:2017/4/25
8   - * 描 述:
9   - * =====================================
10   - */
11   -public interface TypeListener {
12   - void cancel();
13   -
14   - void confirm();
15   -}
core/base/src/main/java/com/cjt2325/cameralibrary/state/BorrowPictureState.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.state;
2   -
3   -import android.content.Context;
4   -import android.view.Surface;
5   -import android.view.SurfaceHolder;
6   -
7   -import com.cjt2325.cameralibrary.CameraInterface;
8   -import com.cjt2325.cameralibrary.JCameraView;
9   -import com.cjt2325.cameralibrary.util.LogUtil;
10   -
11   -/**
12   - * =====================================
13   - * 作 者: 陈嘉桐
14   - * 版 本:1.1.4
15   - * 创建日期:2017/9/8
16   - * 描 述:
17   - * =====================================
18   - */
19   -public class BorrowPictureState implements State {
20   - private final String TAG = "BorrowPictureState";
21   - private CameraMachine machine;
22   -
23   - public BorrowPictureState(CameraMachine machine) {
24   - this.machine = machine;
25   - }
26   -
27   - @Override
28   - public boolean start(SurfaceHolder holder, float screenProp) {
29   - if (CameraInterface.getInstance().doStartPreview(holder, screenProp)) {
30   - machine.setState(machine.getPreviewState());
31   - return true;
32   - }
33   - return false;
34   - }
35   -
36   - @Override
37   - public void stop() {
38   -
39   - }
40   -
41   -
42   - @Override
43   - public boolean foucs(float x, float y, CameraInterface.FocusCallback callback) {
44   - return false;
45   - }
46   -
47   - @Override
48   - public boolean swtich(SurfaceHolder holder, float screenProp) {
49   - return false;
50   - }
51   -
52   - @Override
53   - public void restart() {
54   -
55   - }
56   -
57   - @Override
58   - public boolean capture() {
59   - return false;
60   - }
61   -
62   - @Override
63   - public boolean record(Surface surface, float screenProp, Context context) {
64   - return false;
65   - }
66   -
67   - @Override
68   - public void stopRecord(boolean isShort, long time) {
69   - }
70   -
71   - @Override
72   - public void cancle(SurfaceHolder holder, float screenProp) {
73   - CameraInterface.getInstance().doStartPreview(holder, screenProp);
74   - machine.getView().resetState(JCameraView.TYPE_PICTURE);
75   - machine.setState(machine.getPreviewState());
76   - }
77   -
78   - @Override
79   - public void confirm() {
80   - machine.getView().confirmState(JCameraView.TYPE_PICTURE);
81   - machine.setState(machine.getPreviewState());
82   - }
83   -
84   - @Override
85   - public void zoom(float zoom, int type) {
86   - LogUtil.i(TAG, "zoom");
87   - }
88   -
89   - @Override
90   - public void flash(String mode) {
91   - return ;
92   - }
93   -
94   - @Override
95   - public void onDestroy() {
96   - CameraInterface.getInstance().onDestroy();
97   - }
98   -
99   -}
core/base/src/main/java/com/cjt2325/cameralibrary/state/BorrowVideoState.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.state;
2   -
3   -import android.content.Context;
4   -import android.view.Surface;
5   -import android.view.SurfaceHolder;
6   -
7   -import com.cjt2325.cameralibrary.CameraInterface;
8   -import com.cjt2325.cameralibrary.JCameraView;
9   -import com.cjt2325.cameralibrary.util.LogUtil;
10   -
11   -/**
12   - * =====================================
13   - * 作 者: 陈嘉桐
14   - * 版 本:1.1.4
15   - * 创建日期:2017/9/8
16   - * 描 述:
17   - * =====================================
18   - */
19   -public class BorrowVideoState implements State {
20   - private final String TAG = "BorrowVideoState";
21   - private CameraMachine machine;
22   -
23   - public BorrowVideoState(CameraMachine machine) {
24   - this.machine = machine;
25   - }
26   -
27   - @Override
28   - public boolean start(SurfaceHolder holder, float screenProp) {
29   - if (CameraInterface.getInstance().doStartPreview(holder, screenProp)) {
30   - machine.setState(machine.getPreviewState());
31   - return true;
32   - }
33   - return false;
34   - }
35   -
36   - @Override
37   - public void stop() {
38   -
39   - }
40   -
41   - @Override
42   - public boolean foucs(float x, float y, CameraInterface.FocusCallback callback) {
43   - return false;
44   - }
45   -
46   -
47   - @Override
48   - public boolean swtich(SurfaceHolder holder, float screenProp) {
49   - return false;
50   - }
51   -
52   - @Override
53   - public void restart() {
54   -
55   - }
56   -
57   - @Override
58   - public boolean capture() {
59   - return false;
60   - }
61   -
62   - @Override
63   - public boolean record(Surface surface, float screenProp, Context context) {
64   - return false;
65   - }
66   -
67   - @Override
68   - public void stopRecord(boolean isShort, long time) {
69   -
70   - }
71   -
72   - @Override
73   - public void cancle(SurfaceHolder holder, float screenProp) {
74   - machine.getView().resetState(JCameraView.TYPE_VIDEO);
75   - machine.setState(machine.getPreviewState());
76   - }
77   -
78   - @Override
79   - public void confirm() {
80   - machine.getView().confirmState(JCameraView.TYPE_VIDEO);
81   - machine.setState(machine.getPreviewState());
82   - }
83   -
84   - @Override
85   - public void zoom(float zoom, int type) {
86   - LogUtil.i(TAG, "zoom");
87   - }
88   -
89   - @Override
90   - public void flash(String mode) {
91   - return ;
92   - }
93   -
94   - @Override
95   - public void onDestroy() {
96   - CameraInterface.getInstance().onDestroy();
97   - }
98   -}
core/base/src/main/java/com/cjt2325/cameralibrary/state/CameraMachine.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.state;
2   -
3   -import android.content.Context;
4   -import android.view.Surface;
5   -import android.view.SurfaceHolder;
6   -
7   -import com.cjt2325.cameralibrary.CameraInterface;
8   -import com.cjt2325.cameralibrary.view.CameraView;
9   -
10   -/**
11   - * =====================================
12   - * 作 者: 陈嘉桐
13   - * 版 本:1.1.4
14   - * 创建日期:2017/9/8
15   - * 描 述:
16   - * =====================================
17   - */
18   -public class CameraMachine implements State {
19   -
20   -
21   - private Context context;
22   - private State state;
23   - private CameraView view;
24   -// private CameraInterface.CameraOpenOverCallback cameraOpenOverCallback;
25   -
26   - private State previewState; //浏览状态(空闲)
27   - private State borrowPictureState; //浏览图片
28   - private State borrowVideoState; //浏览视频
29   -
30   - public CameraMachine(Context context, CameraView view, CameraInterface.CameraOpenOverCallback
31   - cameraOpenOverCallback) {
32   - this.context = context;
33   - previewState = new PreviewState(this);
34   - borrowPictureState = new BorrowPictureState(this);
35   - borrowVideoState = new BorrowVideoState(this);
36   - //默认设置为空闲状态
37   - this.state = previewState;
38   -// this.cameraOpenOverCallback = cameraOpenOverCallback;
39   - this.view = view;
40   - }
41   -
42   - public CameraView getView() {
43   - return view;
44   - }
45   -
46   - public Context getContext() {
47   - return context;
48   - }
49   -
50   - public void setState(State state) {
51   - this.state = state;
52   - }
53   -
54   - public void setDefaultState() {
55   - this.state = previewState;
56   - }
57   -
58   - //获取浏览图片状态
59   - State getBorrowPictureState() {
60   - return borrowPictureState;
61   - }
62   -
63   - //获取浏览视频状态
64   - State getBorrowVideoState() {
65   - return borrowVideoState;
66   - }
67   -
68   - //获取空闲状态
69   - public State getPreviewState() {
70   - return previewState;
71   - }
72   -
73   - @Override
74   - public boolean start(SurfaceHolder holder, float screenProp) {
75   - return state.start(holder, screenProp);
76   - }
77   -
78   - @Override
79   - public void stop() {
80   - state.stop();
81   - }
82   -
83   - @Override
84   - public boolean foucs(float x, float y, CameraInterface.FocusCallback callback) {
85   - return state.foucs(x, y, callback);
86   - }
87   -
88   - @Override
89   - public boolean swtich(SurfaceHolder holder, float screenProp) {
90   - return state.swtich(holder, screenProp);
91   - }
92   -
93   - @Override
94   - public void restart() {
95   - state.restart();
96   - }
97   -
98   - @Override
99   - public boolean capture() {
100   - return state.capture();
101   - }
102   -
103   - @Override
104   - public boolean record(Surface surface, float screenProp,Context context) {
105   - return state.record(surface, screenProp,context);
106   - }
107   -
108   - @Override
109   - public void stopRecord(boolean isShort, long time) {
110   - state.stopRecord(isShort, time);
111   - }
112   -
113   - @Override
114   - public void cancle(SurfaceHolder holder, float screenProp) {
115   - state.cancle(holder, screenProp);
116   - }
117   -
118   - @Override
119   - public void confirm() {
120   - state.confirm();
121   - }
122   -
123   -
124   - @Override
125   - public void zoom(float zoom, int type) {
126   - state.zoom(zoom, type);
127   - }
128   -
129   - @Override
130   - public void flash(String mode) {
131   - state.flash(mode);
132   - }
133   -
134   - @Override
135   - public void onDestroy() {
136   - if (state != null) state.onDestroy();
137   - }
138   -
139   - public State getState() {
140   - return this.state;
141   - }
142   -}
core/base/src/main/java/com/cjt2325/cameralibrary/state/PreviewState.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.state;
2   -
3   -import android.content.Context;
4   -import android.graphics.Bitmap;
5   -import android.util.Log;
6   -import android.view.Surface;
7   -import android.view.SurfaceHolder;
8   -
9   -import com.cjt2325.cameralibrary.CameraInterface;
10   -import com.cjt2325.cameralibrary.JCameraView;
11   -import com.cjt2325.cameralibrary.util.LogUtil;
12   -
13   -/**
14   - * =====================================
15   - * 作 者: 陈嘉桐
16   - * 版 本:1.1.4
17   - * 创建日期:2017/9/8
18   - * 描 述:空闲状态
19   - * =====================================
20   - */
21   -class PreviewState implements State {
22   - public static final String TAG = "PreviewState";
23   -
24   - private CameraMachine machine;
25   -
26   - PreviewState(CameraMachine machine) {
27   - this.machine = machine;
28   - }
29   -
30   - @Override
31   - public boolean start(SurfaceHolder holder, float screenProp) {
32   - return CameraInterface.getInstance().doStartPreview(holder, screenProp);
33   - }
34   -
35   - @Override
36   - public void stop() {
37   - CameraInterface.getInstance().doStopPreview();
38   - }
39   -
40   -
41   - @Override
42   - public boolean foucs(float x, float y, CameraInterface.FocusCallback callback) {
43   - LogUtil.i("preview state foucs");
44   - try {
45   - if (machine.getView().handlerFoucs(x, y)) {
46   - return CameraInterface.getInstance().handleFocus(machine.getContext(), x, y, callback);
47   - }
48   - } catch (Exception e) {
49   - Log.e("Camera", "", e);
50   - }
51   -
52   - return false;
53   - }
54   -
55   - @Override
56   - public boolean swtich(SurfaceHolder holder, float screenProp) {
57   - return CameraInterface.getInstance().switchCamera(holder, screenProp);
58   - }
59   -
60   - @Override
61   - public void restart() {
62   -
63   - }
64   -
65   - @Override
66   - public boolean capture() {
67   - return CameraInterface.getInstance().takePicture(new CameraInterface.TakePictureCallback() {
68   - @Override
69   - public void captureResult(Bitmap bitmap, boolean isVertical) {
70   - machine.getView().showPicture(bitmap, isVertical);
71   - machine.setState(machine.getBorrowPictureState());
72   - LogUtil.i("capture");
73   - }
74   - });
75   - }
76   -
77   - @Override
78   - public boolean record(Surface surface, float screenProp, Context context) {
79   - return CameraInterface.getInstance().startRecord(surface, screenProp, null,context);
80   - }
81   -
82   - @Override
83   - public void stopRecord(final boolean isShort, long time) {
84   - CameraInterface.getInstance().stopRecord(isShort, new CameraInterface.StopRecordCallback() {
85   - @Override
86   - public void recordResult(String url) {
87   - if (isShort) {
88   - machine.getView().resetState(JCameraView.TYPE_SHORT);
89   - } else {
90   - machine.getView().playVideo(url);
91   - machine.setState(machine.getBorrowVideoState());
92   - }
93   - }
94   - });
95   - }
96   -
97   - @Override
98   - public void cancle(SurfaceHolder holder, float screenProp) {
99   - LogUtil.i("浏览状态下,没有 cancle 事件");
100   - }
101   -
102   - @Override
103   - public void confirm() {
104   - LogUtil.i("浏览状态下,没有 confirm 事件");
105   - }
106   -
107   - @Override
108   - public void zoom(float zoom, int type) {
109   - LogUtil.i(TAG, "zoom");
110   - CameraInterface.getInstance().setZoom(zoom, type);
111   - }
112   -
113   - @Override
114   - public void flash(String mode) {
115   - CameraInterface.getInstance().setFlashMode(mode);
116   - }
117   -
118   - @Override
119   - public void onDestroy() {
120   - CameraInterface.getInstance().onDestroy();
121   - }
122   -}
core/base/src/main/java/com/cjt2325/cameralibrary/state/State.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.state;
2   -
3   -import android.content.Context;
4   -import android.view.Surface;
5   -import android.view.SurfaceHolder;
6   -
7   -import com.cjt2325.cameralibrary.CameraInterface;
8   -
9   -/**
10   - * =====================================
11   - * 作 者: 陈嘉桐
12   - * 版 本:1.1.4
13   - * 创建日期:2017/9/8
14   - * 描 述:
15   - * =====================================
16   - */
17   -public interface State {
18   -
19   - boolean start(SurfaceHolder holder, float screenProp);
20   -
21   - void stop();
22   -
23   - boolean foucs(float x, float y, CameraInterface.FocusCallback callback);
24   -
25   - boolean swtich(SurfaceHolder holder, float screenProp);
26   -
27   - void restart();
28   -
29   - boolean capture();
30   -
31   - boolean record(Surface surface, float screenProp, Context context);
32   -
33   - void stopRecord(boolean isShort, long time);
34   -
35   - void cancle(SurfaceHolder holder, float screenProp);
36   -
37   - void confirm();
38   -
39   - void zoom(float zoom, int type);
40   -
41   - void flash(String mode);
42   -
43   - void onDestroy();
44   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/AngleUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -/**
4   - * =====================================
5   - * 作 者: 陈嘉桐
6   - * 版 本:1.1.4
7   - * 创建日期:2017/5/2
8   - * 描 述:
9   - * =====================================
10   - */
11   -public class AngleUtil {
12   - public static int getSensorAngle(float x, float y) {
13   - if (Math.abs(x) > Math.abs(y)) {
14   - /**
15   - * 横屏倾斜角度比较大
16   - */
17   - if (x > 4) {
18   - /**
19   - * 左边倾斜
20   - */
21   - return 270;
22   - } else if (x < -4) {
23   - /**
24   - * 右边倾斜
25   - */
26   - return 90;
27   - } else {
28   - /**
29   - * 倾斜角度不够大
30   - */
31   - return 0;
32   - }
33   - } else {
34   - if (y > 7) {
35   - /**
36   - * 左边倾斜
37   - */
38   - return 0;
39   - } else if (y < -7) {
40   - /**
41   - * 右边倾斜
42   - */
43   - return 180;
44   - } else {
45   - /**
46   - * 倾斜角度不够大
47   - */
48   - return 0;
49   - }
50   - }
51   - }
52   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/AudioUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.content.Context;
4   -import android.media.AudioManager;
5   -
6   -/**
7   - * =====================================
8   - * 作 者: 陈嘉桐
9   - * 版 本:1.1.4
10   - * 创建日期:2017/4/26
11   - * 描 述:
12   - * =====================================
13   - */
14   -public class AudioUtil {
15   - public static void setAudioManage(Context context) {
16   - AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
17   - audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
18   - audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
19   - audioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, 0);
20   - audioManager.setStreamVolume(AudioManager.STREAM_DTMF, 0, 0);
21   - audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, 0);
22   - audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
23   - }
24   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/CameraParamUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.content.Context;
4   -import android.hardware.Camera;
5   -import android.util.Log;
6   -import android.view.Surface;
7   -import android.view.WindowManager;
8   -
9   -import com.cnlive.libs.base.util.AlertUtil;
10   -
11   -import java.util.Collections;
12   -import java.util.Comparator;
13   -import java.util.List;
14   -
15   -/**
16   - * =====================================
17   - * 作 者: 陈嘉桐
18   - * 版 本:1.1.4
19   - * 创建日期:2017/4/25
20   - * 描 述:
21   - * =====================================
22   - */
23   -public class CameraParamUtil {
24   - private static final String TAG = "JCameraView";
25   - private CameraSizeComparator sizeComparator = new CameraSizeComparator();
26   - private static CameraParamUtil cameraParamUtil = null;
27   -
28   - private CameraParamUtil() {
29   -
30   - }
31   -
32   - public static CameraParamUtil getInstance() {
33   - if (cameraParamUtil == null) {
34   - cameraParamUtil = new CameraParamUtil();
35   - return cameraParamUtil;
36   - } else {
37   - return cameraParamUtil;
38   - }
39   - }
40   -
41   - public Camera.Size getPreviewSize(List<Camera.Size> list, int th, float rate) {
42   - Collections.sort(list, sizeComparator);
43   - int i = 0;
44   - for (Camera.Size s : list) {
45   - if ((s.width > th) && equalRate(s, rate)) {
46   - Log.i(TAG, "MakeSure Preview :w = " + s.width + " h = " + s.height);
47   - break;
48   - }
49   - i++;
50   - }
51   - if (i == list.size()) {
52   - return getBestSize(list, rate);
53   - } else {
54   - return list.get(i);
55   - }
56   - }
57   -
58   - public Camera.Size getPictureSize(List<Camera.Size> list, int th, float rate) {
59   - Collections.sort(list, sizeComparator);
60   - int i = 0;
61   - for (Camera.Size s : list) {
62   - if ((s.width > th) && equalRate(s, rate)) {
63   - Log.i(TAG, "MakeSure Picture :w = " + s.width + " h = " + s.height);
64   - break;
65   - }
66   - i++;
67   - }
68   - if (i == list.size()) {
69   - return getBestSize(list, rate);
70   - } else {
71   - return list.get(i);
72   - }
73   - }
74   -
75   - private Camera.Size getBestSize(List<Camera.Size> list, float rate) {
76   - float previewDisparity = 100;
77   - int index = 0;
78   - for (int i = 0; i < list.size(); i++) {
79   - Camera.Size cur = list.get(i);
80   - float prop = (float) cur.width / (float) cur.height;
81   - if (Math.abs(rate - prop) < previewDisparity) {
82   - previewDisparity = Math.abs(rate - prop);
83   - index = i;
84   - }
85   - }
86   - return list.get(index);
87   - }
88   -
89   -
90   - private boolean equalRate(Camera.Size s, float rate) {
91   - float r = (float) (s.width) / (float) (s.height);
92   - return Math.abs(r - rate) <= 0.2;
93   - }
94   -
95   - public boolean isSupportedFocusMode(List<String> focusList, String focusMode) {
96   - for (int i = 0; i < focusList.size(); i++) {
97   - if (focusMode.equals(focusList.get(i))) {
98   - Log.i(TAG, "FocusMode supported " + focusMode);
99   - return true;
100   - }
101   - }
102   - Log.i(TAG, "FocusMode not supported " + focusMode);
103   - return false;
104   - }
105   -
106   - public boolean isSupportedPictureFormats(List<Integer> supportedPictureFormats, int jpeg) {
107   - for (int i = 0; i < supportedPictureFormats.size(); i++) {
108   - if (jpeg == supportedPictureFormats.get(i)) {
109   - Log.i(TAG, "Formats supported " + jpeg);
110   - return true;
111   - }
112   - }
113   - Log.i(TAG, "Formats not supported " + jpeg);
114   - return false;
115   - }
116   -
117   - private class CameraSizeComparator implements Comparator<Camera.Size> {
118   - public int compare(Camera.Size lhs, Camera.Size rhs) {
119   - if (lhs.width == rhs.width) {
120   - return 0;
121   - } else if (lhs.width > rhs.width) {
122   - return 1;
123   - } else {
124   - return -1;
125   - }
126   - }
127   -
128   - }
129   -
130   - public int getCameraDisplayOrientation(Context context, int cameraId) {
131   - Camera.CameraInfo info = new Camera.CameraInfo();
132   - try {
133   - Camera.getCameraInfo(cameraId, info);
134   - } catch (Exception e) {
135   - Log.e("CameraInterface", "像机ID识别错误", e);
136   - AlertUtil.showFailedToast(context,"像机ID识别错误"+cameraId);
137   - }
138   - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
139   - int rotation = wm.getDefaultDisplay().getRotation();
140   - int degrees = 0;
141   - switch (rotation) {
142   - case Surface.ROTATION_0:
143   - degrees = 0;
144   - break;
145   - case Surface.ROTATION_90:
146   - degrees = 90;
147   - break;
148   - case Surface.ROTATION_180:
149   - degrees = 180;
150   - break;
151   - case Surface.ROTATION_270:
152   - degrees = 270;
153   - break;
154   - }
155   - int result;
156   - if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
157   - result = (info.orientation + degrees) % 360;
158   - result = (360 - result) % 360; // compensate the mirror
159   - } else {
160   - // back-facing
161   - result = (info.orientation - degrees + 360) % 360;
162   - }
163   - return result;
164   - }
165   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/CheckPermission.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.hardware.Camera;
4   -import android.media.AudioFormat;
5   -import android.media.AudioRecord;
6   -import android.media.MediaRecorder;
7   -import android.util.Log;
8   -
9   -/**
10   - * =====================================
11   - * 作 者: 陈嘉桐
12   - * 版 本:1.1.4
13   - * 创建日期:2017/6/8
14   - * 描 述:
15   - * =====================================
16   - */
17   -public class CheckPermission {
18   - public static final int STATE_RECORDING = -1;
19   - public static final int STATE_NO_PERMISSION = -2;
20   - public static final int STATE_SUCCESS = 1;
21   -
22   - /**
23   - * 用于检测是否具有录音权限
24   - *
25   - * @return
26   - */
27   - public static int getRecordState() {
28   - AudioRecord audioRecord =null;
29   - int minBuffer = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat
30   - .ENCODING_PCM_16BIT);
31   - try {
32   - audioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 44100, AudioFormat
33   - .CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, (minBuffer * 100));
34   - }catch (Exception e){
35   -
36   - };
37   - if(audioRecord==null){
38   - return STATE_NO_PERMISSION;
39   - }
40   - short[] point = new short[minBuffer];
41   - int readSize = 0;
42   - try {
43   -
44   - audioRecord.startRecording();//检测是否可以进入初始化状态
45   - } catch (Exception e) {
46   - if (audioRecord != null) {
47   - audioRecord.release();
48   - audioRecord = null;
49   - }
50   - return STATE_NO_PERMISSION;
51   - }
52   - if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
53   - //6.0以下机型都会返回此状态,故使用时需要判断bulid版本
54   - //检测是否在录音中
55   - if (audioRecord != null) {
56   - audioRecord.stop();
57   - audioRecord.release();
58   - audioRecord = null;
59   - Log.d("CheckAudioPermission", "录音机被占用");
60   - }
61   - return STATE_RECORDING;
62   - } else {
63   - //检测是否可以获取录音结果
64   -
65   - readSize = audioRecord.read(point, 0, point.length);
66   -
67   -
68   - if (readSize <= 0) {
69   - if (audioRecord != null) {
70   - audioRecord.stop();
71   - audioRecord.release();
72   - audioRecord = null;
73   -
74   - }
75   - Log.d("CheckAudioPermission", "录音的结果为空");
76   - return STATE_NO_PERMISSION;
77   -
78   - } else {
79   - if (audioRecord != null) {
80   - audioRecord.stop();
81   - audioRecord.release();
82   - audioRecord = null;
83   -
84   - }
85   -
86   - return STATE_SUCCESS;
87   - }
88   - }
89   - }
90   -
91   - public synchronized static boolean isCameraUseable(int cameraID) {
92   - boolean canUse = true;
93   - Camera mCamera = null;
94   - try {
95   - mCamera = Camera.open(cameraID);
96   - // setParameters 是针对魅族MX5。MX5通过Camera.open()拿到的Camera对象不为null
97   - Camera.Parameters mParameters = mCamera.getParameters();
98   - mCamera.setParameters(mParameters);
99   - } catch (Exception e) {
100   - e.printStackTrace();
101   - canUse = false;
102   - } finally {
103   - if (mCamera != null) {
104   - mCamera.release();
105   - } else {
106   - canUse = false;
107   - }
108   - mCamera = null;
109   - }
110   - return canUse;
111   - }
112   -}
113 0 \ No newline at end of file
core/base/src/main/java/com/cjt2325/cameralibrary/util/DeviceUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.os.Build;
4   -
5   -/**
6   - * =====================================
7   - * 作 者: 陈嘉桐
8   - * 版 本:1.1.4
9   - * 创建日期:2017/6/9
10   - * 描 述:
11   - * =====================================
12   - */
13   -public class DeviceUtil {
14   -
15   - private static String[] huaweiRongyao = {
16   - "hwH60", //荣耀6
17   - "hwPE", //荣耀6 plus
18   - "hwH30", //3c
19   - "hwHol", //3c畅玩版
20   - "hwG750", //3x
21   - "hw7D", //x1
22   - "hwChe2", //x1
23   - };
24   -
25   - public static String getDeviceInfo() {
26   - String handSetInfo =
27   - "手机型号:" + Build.DEVICE +
28   - "\n系统版本:" + Build.VERSION.RELEASE +
29   - "\nSDK版本:" + Build.VERSION.SDK_INT;
30   - return handSetInfo;
31   - }
32   -
33   - public static String getDeviceModel() {
34   - return Build.DEVICE;
35   - }
36   -
37   - public static boolean isHuaWeiRongyao() {
38   - int length = huaweiRongyao.length;
39   - for (int i = 0; i < length; i++) {
40   - if (huaweiRongyao[i].equals(getDeviceModel())) {
41   - return true;
42   - }
43   - }
44   - return false;
45   - }
46   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/FileUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.content.Context;
4   -import android.graphics.Bitmap;
5   -import android.os.Build;
6   -import android.os.Environment;
7   -
8   -import java.io.BufferedOutputStream;
9   -import java.io.File;
10   -import java.io.FileOutputStream;
11   -import java.io.IOException;
12   -
13   -/**
14   - * =====================================
15   - * 作 者: 陈嘉桐
16   - * 版 本:1.1.4
17   - * 创建日期:2017/4/25
18   - * 描 述:
19   - * =====================================
20   - */
21   -public class FileUtil {
22   - private static final String TAG = "CJT";
23   - private static String storagePath = "";
24   - private static String DST_FOLDER_NAME = "JCamera";
25   -
26   - private static String initPath(Context context) {
27   - if (storagePath.equals("")) {
28   - storagePath = (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q ? context.getExternalFilesDir("") : Environment.getExternalStorageDirectory()).getAbsolutePath() + File.separator + DST_FOLDER_NAME;
29   - File f = new File(storagePath);
30   - if (!f.exists()) {
31   - f.mkdir();
32   - }
33   - }
34   - return storagePath;
35   - }
36   -
37   - public static String saveBitmap(Context context,String dir, Bitmap b) {
38   - DST_FOLDER_NAME = dir;
39   -
40   - String path = initPath(context);
41   - long dataTake = System.currentTimeMillis();
42   - String jpegName = path + File.separator + "picture_" + dataTake + ".jpg";
43   - try {
44   - FileOutputStream fout = new FileOutputStream(jpegName);
45   - BufferedOutputStream bos = new BufferedOutputStream(fout);
46   - b.compress(Bitmap.CompressFormat.JPEG, 100, bos);
47   - bos.flush();
48   - bos.close();
49   - return jpegName;
50   - } catch (IOException e) {
51   - e.printStackTrace();
52   - return "";
53   - }
54   - }
55   -
56   - public static boolean deleteFile(String url) {
57   - boolean result = false;
58   - File file = new File(url);
59   - if (file.exists()) {
60   - result = file.delete();
61   - }
62   - return result;
63   - }
64   -
65   - public static boolean isExternalStorageWritable() {
66   - String state = Environment.getExternalStorageState();
67   - if (Environment.MEDIA_MOUNTED.equals(state)) {
68   - return true;
69   - }
70   - return false;
71   - }
72   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/LogUtil.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.util.Log;
4   -
5   -
6   -/**
7   - * =====================================
8   - * 作 者: 陈嘉桐
9   - * 版 本:1.1.4
10   - * 创建日期:2017/9/7
11   - * 描 述:
12   - * =====================================
13   - */
14   -public class LogUtil {
15   -
16   - private static final String DEFAULT_TAG = "CJT";
17   -
18   - public static void i(String tag, String msg) {
19   -// if (DEBUG)
20   - Log.i(tag, msg);
21   - }
22   -
23   - public static void v(String tag, String msg) {
24   - Log.v(tag, msg);
25   - }
26   -
27   - public static void d(String tag, String msg) {
28   - Log.d(tag, msg);
29   - }
30   -
31   - public static void e(String tag, String msg) {
32   - Log.e(tag, msg);
33   - }
34   -
35   - public static void i(String msg) {
36   - i(DEFAULT_TAG, msg);
37   - }
38   -
39   - public static void v(String msg) {
40   - v(DEFAULT_TAG, msg);
41   - }
42   -
43   - public static void d(String msg) {
44   - d(DEFAULT_TAG, msg);
45   - }
46   -
47   - public static void e(String msg) {
48   - e(DEFAULT_TAG, msg);
49   - }
50   -}
core/base/src/main/java/com/cjt2325/cameralibrary/util/ScreenUtils.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.util;
2   -
3   -import android.content.Context;
4   -import android.util.DisplayMetrics;
5   -import android.util.TypedValue;
6   -import android.view.WindowManager;
7   -
8   -/**
9   - * =====================================
10   - * 作 者: 陈嘉桐
11   - * 版 本:1.1.4
12   - * 创建日期:2017/5/25
13   - * 描 述:
14   - * =====================================
15   - */
16   -public class ScreenUtils {
17   - public static int getScreenHeight(Context context) {
18   - DisplayMetrics metric = new DisplayMetrics();
19   - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
20   - wm.getDefaultDisplay().getMetrics(metric);
21   - return metric.heightPixels;
22   - }
23   -
24   - public static int getScreenWidth(Context context) {
25   - DisplayMetrics metric = new DisplayMetrics();
26   - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
27   - wm.getDefaultDisplay().getMetrics(metric);
28   - return metric.widthPixels;
29   - }
30   - /**
31   - * dp转px
32   - *
33   - * @param context
34   - * @param dpVal
35   - * @return
36   - */
37   - public static int dp2px(Context context, float dpVal) {
38   - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
39   - dpVal, context.getResources().getDisplayMetrics());
40   - }
41   -
42   - /**
43   - * sp转px
44   - *
45   - * @param context
46   - * @param spVal
47   - * @return
48   - */
49   - public static int sp2px(Context context, float spVal) {
50   - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
51   - spVal, context.getResources().getDisplayMetrics());
52   - }
53   -
54   - /**
55   - * px转dp
56   - *
57   - * @param context
58   - * @param pxVal
59   - * @return
60   - */
61   - public static float px2dp(Context context, float pxVal) {
62   - final float scale = context.getResources().getDisplayMetrics().density;
63   - return (pxVal / scale);
64   - }
65   -
66   - /**
67   - * px转sp
68   - *
69   - * @param context
70   - * @param pxVal
71   - * @return
72   - */
73   - public static float px2sp(Context context, float pxVal) {
74   - return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
75   - }
76   -}
core/base/src/main/java/com/cjt2325/cameralibrary/view/CameraView.java deleted 100644 → 0
1   -package com.cjt2325.cameralibrary.view;
2   -
3   -import android.graphics.Bitmap;
4   -
5   -/**
6   - * =====================================
7   - * 作 者: 陈嘉桐
8   - * 版 本:1.1.4
9   - * 创建日期:2017/9/8
10   - * 描 述:
11   - * =====================================
12   - */
13   -public interface CameraView {
14   - void resetState(int type);
15   -
16   - void confirmState(int type);
17   -
18   - void showPicture(Bitmap bitmap, boolean isVertical);
19   -
20   - void playVideo(String url);
21   -
22   - void stopVideo();
23   -
24   - void setTip(String tip);
25   -
26   - void startPreviewCallback();
27   -
28   - boolean handlerFoucs(float x, float y);
29   -
30   - void pausePlayer();
31   - void resumePlayer();
32   -}
core/base/src/main/java/com/cnlive/libs/base/frame/activity/BaseActivity.java
... ... @@ -4,7 +4,6 @@ package com.cnlive.libs.base.frame.activity;
4 4 import android.annotation.SuppressLint;
5 5 import android.content.Context;
6 6 import android.content.pm.ActivityInfo;
7   -import android.database.DatabaseUtils;
8 7 import android.os.Bundle;
9 8 import android.os.Looper;
10 9 import android.view.View;
... ... @@ -23,7 +22,6 @@ import androidx.databinding.ViewDataBinding;
23 22  
24 23 import com.cnlive.libs.base.util.StatusBarConfig;
25 24 import com.cnlive.libs.base.util.StatusBarUtil;
26   -import com.cnlive.libs.base.util.lib_permisshelper.PermissionsUtils;
27 25 import com.cnlive.libs.base.util.ActivityCollector;
28 26  
29 27 /**
... ... @@ -42,7 +40,6 @@ public abstract class BaseActivity extends AppCompatActivity {
42 40 //封装Toast对象
43 41 private static Toast toast;
44 42 public Context context;
45   - private PermissionsUtils mPermissionsUtils;//权限申请
46 43 private int stateBarColor = -1;
47 44 public ViewDataBinding binding;
48 45  
... ... @@ -68,7 +65,6 @@ public abstract class BaseActivity extends AppCompatActivity {
68 65 } else {
69 66 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
70 67 }
71   - mPermissionsUtils = new PermissionsUtils();//权限申请
72 68 //初始化控件
73 69 initView();
74 70 //设置数据
... ...
core/base/src/main/java/com/cnlive/libs/base/logic/Config.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic;
2   -
3   -/**
4   - * Created by xiansong on 2018/1/4.
5   - */
6   -
7   -public class Config {
8   -
9   - //成功状态
10   - public static final int SUCCESS = 0;
11   - //失败状态
12   - public static final int FAIL = -1;
13   - //系统错误
14   - public static final int ERROR_SYSTEM = 2003;
15   - //上传/下载错误
16   - public static final int ERROR_UPLOAD = 2004;
17   - //空闲状态
18   - public static final int STATE_IDLE = 3001;
19   - //加载状态
20   - public static final int STATE_LOAD = 3002;
21   -
22   - public static final String ERROR_DEF = "%S_ERROR_%s code:%s message:%s";
23   -}
core/base/src/main/java/com/cnlive/libs/base/logic/Event.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic;
2   -
3   -
4   -
5   -import com.cnlive.libs.base.logic.callback.Callback;
6   -import com.cnlive.libs.base.logic.callback.FailureCallback;
7   -import com.cnlive.libs.base.logic.callback.CancelCallback;
8   -import com.cnlive.libs.base.logic.callback.ProgressCallback;
9   -import com.cnlive.libs.base.logic.callback.StateCallback;
10   -import com.cnlive.libs.base.logic.callback.SuccessCallback;
11   -
12   -import java.util.ArrayList;
13   -import java.util.HashMap;
14   -import java.util.List;
15   -import java.util.Map;
16   -
17   -import io.reactivex.disposables.Disposable;
18   -
19   -/**
20   - * Created by xiansong on 2018/1/8.
21   - */
22   -
23   -public class Event<T> {
24   -
25   - private static final int success_call = 1;
26   - private static final int failure_call = 2;
27   - private static final int state_call = 3;
28   - private static final int cancel_call = 4;
29   - private static final int progress_call = 5;
30   -
31   - public boolean active = true;
32   - private Logic logic;
33   - private List<Disposable> disposables = new ArrayList<>();
34   - private Map<Integer, Callback> callbackArray;
35   -
36   - public Event() {
37   - this.callbackArray = new HashMap<>();
38   - }
39   -
40   - public void setLogic(Logic logic) {
41   - this.logic = logic;
42   - }
43   -
44   - public Event<T> setSuccessCallback(SuccessCallback<T> callback) {
45   - callbackArray.put(success_call, callback);
46   - return this;
47   - }
48   -
49   - public Event<T> setFailureCallback(FailureCallback callback) {
50   - callbackArray.put(failure_call, callback);
51   - return this;
52   - }
53   -
54   - public Event<T> setStateCallback(StateCallback callback) {
55   - callbackArray.put(state_call, callback);
56   - return this;
57   - }
58   -
59   - public Event<T> setCancelCallback(CancelCallback callback) {
60   - callbackArray.put(cancel_call, callback);
61   - return this;
62   - }
63   -
64   - public Event<T> setProgressCallback(ProgressCallback callback) {
65   - callbackArray.put(progress_call, callback);
66   - return this;
67   - }
68   -
69   - public Event<T> addDisposable(Disposable disposable) {
70   - if (disposable != null) disposables.add(disposable);
71   - return this;
72   - }
73   -
74   - public void onSuccess(T data) {
75   - active = false;
76   - SuccessCallback<T> callback = (SuccessCallback<T>) callbackArray.get(success_call);
77   - if (callback != null) callback.onSuccess(data);
78   - }
79   -
80   - public void onFailure(int state, String message) {
81   - active = false;
82   - FailureCallback callback = (FailureCallback) callbackArray.get(failure_call);
83   - if (callback != null) callback.onFailure(state, message);
84   - }
85   -
86   - public void onState(int state) {
87   - StateCallback callback = (StateCallback) callbackArray.get(state_call);
88   - if (callback != null) callback.onState(state);
89   - }
90   -
91   - public void onCancle() {
92   - CancelCallback callback = (CancelCallback) callbackArray.get(cancel_call);
93   - if (callback != null) callback.onCancel();
94   - destroy();
95   - }
96   -
97   - public void onProgress(double progress) {
98   - ProgressCallback callback = (ProgressCallback) callbackArray.get(progress_call);
99   - if (callback != null) callback.onProgress(progress);
100   - }
101   -
102   - public void cencel() {
103   - onCancle();
104   - }
105   -
106   - private void destroy() {
107   - active = false;
108   - callbackArray.clear();
109   - if (disposables != null) for (Disposable disposable : disposables) disposable.dispose();
110   - }
111   -
112   - public Event<T> start() {
113   - if (logic != null) logic.start(this);
114   - return this;
115   - }
116   -}
core/base/src/main/java/com/cnlive/libs/base/logic/Logic.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic;
2   -
3   -
4   -import android.util.Log;
5   -
6   -import com.cnlive.libs.base.logic.callback.DataCallback;
7   -
8   -import java.util.ArrayList;
9   -import java.util.HashMap;
10   -import java.util.List;
11   -import java.util.Map;
12   -
13   -import io.reactivex.Observable;
14   -import io.reactivex.ObservableOnSubscribe;
15   -import io.reactivex.android.schedulers.AndroidSchedulers;
16   -import io.reactivex.disposables.Disposable;
17   -import io.reactivex.functions.Consumer;
18   -import io.reactivex.schedulers.Schedulers;
19   -
20   -public class Logic {
21   - private Event event;
22   -
23   - protected List<BaseAction> actions;
24   -
25   - private Object startParem;
26   -
27   - private Paramer paramer = new Paramer();
28   -
29   - protected Logic(Object startParem) {
30   - this.startParem = startParem;
31   - actions = new ArrayList<>();
32   - }
33   -
34   - public static Logic create(Object startParem) {
35   - return new Logic(startParem);
36   - }
37   -
38   - public static Logic create() {
39   - return new Logic(null);
40   - }
41   -
42   - public <param, result> Logic action(Action<param, result> action) {
43   - if (action == null) return this;
44   - actions.add(action);
45   - return this;
46   - }
47   -
48   - public <param, result> Logic action(ActionMerge<param, result> action) {
49   - if (action == null) return this;
50   - actions.add(action);
51   - return this;
52   - }
53   -
54   - private int action_index = -1;
55   -
56   - private boolean inStart() {
57   - return action_index != -1;
58   - }
59   -
60   - private <Data, Return> void next(Data data) {
61   - BaseAction action = actions.get(action_index++);
62   - BaseAction newAction = action_index < actions.size() ? actions.get(action_index) : null;
63   - LogicCallback<Return> callback = new LogicCallback<>(event, newAction);
64   - Disposable disposable = null;
65   - Exception exception = null;
66   - try {
67   - if (action == null) return;
68   - if (action instanceof Action) disposable = ((Action) action).action(data, callback);
69   - if (action instanceof ActionMerge) disposable = ((ActionMerge) action).action(data, paramer, callback);
70   - } catch (Exception e) {
71   - exception = e;
72   - Log.e("Logic", "页面逻辑出错!", e);
73   - }
74   -
75   - if (disposable != null) event.addDisposable(disposable);
76   - else if (exception != null) onError(Config.FAIL, exception.getMessage(), event);
77   - }
78   -
79   - public <T> Event<T> event() {
80   - if (event != null) return event;
81   - event = new Event<T>();
82   - event.setLogic(this);
83   - return event;
84   - }
85   -
86   - //
87   - public void start(Event event) {
88   - if (event == null) return;
89   - if (inStart()) return;
90   -
91   - this.action_index = 0;
92   - this.event = event;
93   -
94   - if (event.active) {
95   - event.onState(Config.STATE_LOAD);
96   - next(startParem);
97   - }
98   - }
99   -
100   - public interface Execute<T> {
101   - T execute();
102   - }
103   -
104   - private static String getErrorMessage(Throwable throwable) {
105   - return throwable != null ? throwable.getMessage() : "";
106   - }
107   -
108   - public static <T> Disposable process(Execute<T> exce, DataCallback<T> callback) {
109   - Consumer<T> successEV = data -> {
110   - if (callback != null) callback.callback(Config.SUCCESS, "", data);
111   - };
112   - Consumer<Throwable> errorEV = throwable -> {
113   - if (callback != null) callback.callback(Config.FAIL, getErrorMessage(throwable), null);
114   - };
115   - return Observable
116   - .create((ObservableOnSubscribe<T>) emitter -> emitter.onNext(exce.execute()))
117   - .subscribeOn(Schedulers.io())
118   - .observeOn(AndroidSchedulers.mainThread())
119   - .subscribe(successEV, errorEV);
120   - }
121   -
122   - private interface BaseAction {
123   - }
124   -
125   - public interface Action<param, result> extends BaseAction {
126   - Disposable action(param data, DataCallback<result> callback);
127   - }
128   -
129   - public interface ActionMerge<param, result> extends BaseAction {
130   - Disposable action(param data, Paramer paramer, DataCallback<result> callback);
131   - }
132   -
133   - public class LogicCallback<T> implements DataCallback<T> {
134   - private BaseAction action;
135   - private Event event;
136   -
137   - private LogicCallback(Event event, BaseAction action) {
138   - this.event = event;
139   - this.action = action;
140   - }
141   -
142   - @Override
143   - public void callback(int code, String message, T data) {
144   - if (code == Config.SUCCESS) {
145   - if (event.active) {
146   - if (action != null) next(data);
147   - else {
148   - event.onState(Config.STATE_IDLE);
149   - event.onSuccess(data);
150   - }
151   - }
152   - } else onError(code, message, event);
153   - }
154   - }
155   -
156   - private void onError(int code, String message, Event event) {
157   - if (event.active) {
158   - event.onState(Config.STATE_IDLE);
159   - event.onFailure(code, message);
160   - }
161   - }
162   -
163   - public static class Paramer {
164   - private Map<String, Object> map = new HashMap<>();
165   -
166   - public void addParamer(String key, Object value) {
167   - map.put(key, value);
168   - }
169   -
170   - public <T> T getParamer(String key) {
171   - return (T) map.get(key);
172   - }
173   - }
174   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/Callback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -/**
4   - * Created by xiansong on 2018/1/8.
5   - */
6   -
7   -public interface Callback {
8   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/CancelCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -/**
4   - * Created by xiansong on 2018/1/10.
5   - */
6   -
7   -public interface CancelCallback extends Callback {
8   - void onCancel();
9   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/DataCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -/**
4   - * Created by xiansong on 2018/1/8.
5   - */
6   -
7   -public interface DataCallback<T> extends Callback{
8   - //内部数据传递
9   - void callback(int code, String message, T data);
10   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/FailureCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -public interface FailureCallback extends Callback{
4   - //逻辑操作错误事件 ,不影响逻辑代码. 如:Load_xxx_error 或 Input_xxx_empty
5   - void onFailure(int state, String message);
6   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/ProgressCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -/**
4   - * Created by xiansong on 2018/2/1.
5   - */
6   -
7   -public interface ProgressCallback extends Callback{
8   - void onProgress(double progress);
9   -}
core/base/src/main/java/com/cnlive/libs/base/logic/callback/StateCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -public interface StateCallback extends Callback {
4   - //逻辑操作中的状态更新事件.
5   - void onState(int state);
6   -}
7 0 \ No newline at end of file
core/base/src/main/java/com/cnlive/libs/base/logic/callback/SuccessCallback.java deleted 100644 → 0
1   -package com.cnlive.libs.base.logic.callback;
2   -
3   -public interface SuccessCallback<T> extends Callback {
4   - //逻辑操作成功事件响应
5   - void onSuccess(T data);
6   -}
7 0 \ No newline at end of file