diff --git a/.idea/modules.xml b/.idea/modules.xml index c6a94d4..dcbe1f9 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,10 +2,14 @@ + + + + diff --git a/app/src/main/java/com/cjt2325/cameraview/MainActivity.java b/app/src/main/java/com/cjt2325/cameraview/MainActivity.java index 83b281f..8bf743d 100644 --- a/app/src/main/java/com/cjt2325/cameraview/MainActivity.java +++ b/app/src/main/java/com/cjt2325/cameraview/MainActivity.java @@ -15,7 +15,7 @@ import android.widget.Toast; import com.cjt2325.cameralibrary.JCameraView; -import com.cjt2325.cameralibrary.lisenter.JCameraLisenter; +import com.cjt2325.cameralibrary.listener.JCameraListener; import java.io.File; @@ -35,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { jCameraView.setSaveVideoPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "JCamera"); //JCameraView监听 - jCameraView.setJCameraLisenter(new JCameraLisenter() { + jCameraView.setJCameraLisenter(new JCameraListener() { @Override public void captureSuccess(Bitmap bitmap) { //获取图片bitmap diff --git a/camera/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java b/camera/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java index d55178b..ca4f272 100644 --- a/camera/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java +++ b/camera/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java @@ -206,26 +206,27 @@ public void setZoom(float zoom, int type) { if (mCamera == null) { return; } - if (mParams == null) { - mParams = mCamera.getParameters(); - } - if (!mParams.isZoomSupported() || !mParams.isSmoothZoomSupported()) { + if (!mParams.isZoomSupported()) { return; } + int scaleRate = 1; switch (type) { case TYPE_RECORDER: //如果不是录制视频中,上滑不会缩放 if (!isRecorder) { return; } - if (zoom >= 0) { - //每移动50个像素缩放一个级别 - int scaleRate = (int) (zoom / 40); - if (scaleRate <= mParams.getMaxZoom() && scaleRate >= nowScaleRate && recordScleRate != scaleRate) { - mParams.setZoom(scaleRate); - mCamera.setParameters(mParams); - recordScleRate = scaleRate; + //每移动50个像素缩放一个级别 + scaleRate = (int) zoom; + if (scaleRate < mParams.getMaxZoom()) { + nowScaleRate += scaleRate; + if (nowScaleRate < 0) { + nowScaleRate = 0; + } else if (nowScaleRate > mParams.getMaxZoom()) { + nowScaleRate = mParams.getMaxZoom(); } + mParams.setZoom(nowScaleRate); + mCamera.setParameters(mParams); } break; case TYPE_CAPTURE: @@ -233,7 +234,7 @@ public void setZoom(float zoom, int type) { return; } //每移动50个像素缩放一个级别 - int scaleRate = (int) (zoom / 50); + scaleRate = (int) zoom; if (scaleRate < mParams.getMaxZoom()) { nowScaleRate += scaleRate; if (nowScaleRate < 0) { @@ -345,29 +346,7 @@ public void doStartPreview(SurfaceHolder holder, float screenProp) { this.mHolder = holder; if (mCamera != null) { try { - mParams = mCamera.getParameters(); - Camera.Size previewSize = CameraParamUtil.getInstance().getPreviewSize(mParams - .getSupportedPreviewSizes(), 1000, screenProp); - Camera.Size pictureSize = CameraParamUtil.getInstance().getPictureSize(mParams - .getSupportedPictureSizes(), 1200, screenProp); - - mParams.setPreviewSize(previewSize.width, previewSize.height); - - preview_width = previewSize.width; - preview_height = previewSize.height; - - mParams.setPictureSize(pictureSize.width, pictureSize.height); - - if (CameraParamUtil.getInstance().isSupportedFocusMode( - mParams.getSupportedFocusModes(), - Camera.Parameters.FOCUS_MODE_AUTO)) { - mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); - } - if (CameraParamUtil.getInstance().isSupportedPictureFormats(mParams.getSupportedPictureFormats(), - ImageFormat.JPEG)) { - mParams.setPictureFormat(ImageFormat.JPEG); - mParams.setJpegQuality(100); - } + setShootParams(screenProp); mCamera.setParameters(mParams); mParams = mCamera.getParameters(); mCamera.setPreviewDisplay(holder); //SurfaceView @@ -382,6 +361,32 @@ public void doStartPreview(SurfaceHolder holder, float screenProp) { } } + private void setShootParams(float screenProp) { + mParams = mCamera.getParameters(); + Camera.Size previewSize = CameraParamUtil.getInstance().getPreviewSize(mParams + .getSupportedPreviewSizes(), 1000, screenProp); + Camera.Size pictureSize = CameraParamUtil.getInstance().getPictureSize(mParams + .getSupportedPictureSizes(), 1200, screenProp); + + mParams.setPreviewSize(previewSize.width, previewSize.height); + + preview_width = previewSize.width; + preview_height = previewSize.height; + + mParams.setPictureSize(pictureSize.width, pictureSize.height); + + if (CameraParamUtil.getInstance().isSupportedFocusMode( + mParams.getSupportedFocusModes(), + Camera.Parameters.FOCUS_MODE_AUTO)) { + mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); + } + if (CameraParamUtil.getInstance().isSupportedPictureFormats(mParams.getSupportedPictureFormats(), + ImageFormat.JPEG)) { + mParams.setPictureFormat(ImageFormat.JPEG); + mParams.setJpegQuality(100); + } + } + /** * 停止预览 */ diff --git a/camera/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java b/camera/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java index c4761fb..ca0aec0 100644 --- a/camera/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java +++ b/camera/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java @@ -9,6 +9,7 @@ import android.graphics.Paint; import android.graphics.RectF; import android.os.CountDownTimer; +import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -44,10 +45,6 @@ public class CaptureButton extends View { private int outside_color = 0xEEDCDCDC; //外圆背景色 private int inside_color = 0xFFFFFFFF; //内圆背景色 - - private float event_Y; //Touch_Event_Down时候记录的Y值 - - private Paint mPaint; private float strokeWidth; //进度条宽度 @@ -141,6 +138,7 @@ protected void onDraw(Canvas canvas) { } } + float lastLeght = -1; @Override public boolean onTouchEvent(MotionEvent event) { @@ -149,7 +147,6 @@ public boolean onTouchEvent(MotionEvent event) { LogUtil.i("state = " + state); if (event.getPointerCount() > 1 || state != STATE_IDLE) break; - event_Y = event.getY(); //记录Y值 state = STATE_PRESS; //修改当前状态为点击按下 //判断按钮状态是否为可录制状态 @@ -157,16 +154,45 @@ public boolean onTouchEvent(MotionEvent event) { postDelayed(longPressRunnable, 500); //同时延长500启动长按后处理的逻辑Runnable break; case MotionEvent.ACTION_MOVE: + Log.e("TAg", event.getPointerCount() + ""); if (captureLisenter != null && state == STATE_RECORDERING && (button_state == BUTTON_STATE_ONLY_RECORDER || button_state == BUTTON_STATE_BOTH)) { - //记录当前Y值与按下时候Y值的差值,调用缩放回调接口 - captureLisenter.recordZoom(event_Y - event.getY()); + if (event.getPointerCount() == 3) { + //第一个点 + float point_2_X = event.getX(1); + float point_2_Y = event.getY(1); + //第二个点 + float point_3_X = event.getX(2); + float point_3_Y = event.getY(2); + float result = (float) Math.sqrt(Math.pow(point_2_X - point_3_X, 2) + Math.pow(point_2_Y - + point_3_Y, 2)); + + if (lastLeght == -1) { + lastLeght = result; + return true; + } + if (Math.abs(lastLeght - result) > 3) { + if (lastLeght > result) { + //缩小 + captureLisenter.recordZoom(-1); + } else { + //放大 + captureLisenter.recordZoom(1); + } + lastLeght = result; + } + Log.e("TAg", result + ""); + } else { + lastLeght = -1; + } } + break; case MotionEvent.ACTION_UP: //根据当前按钮的状态进行相应的处理 handlerUnpressByState(); + lastLeght = -1; break; } return true; diff --git a/camera/src/main/java/com/cjt2325/cameralibrary/JCameraView.java b/camera/src/main/java/com/cjt2325/cameralibrary/JCameraView.java index b84cbb9..bdd7172 100644 --- a/camera/src/main/java/com/cjt2325/cameralibrary/JCameraView.java +++ b/camera/src/main/java/com/cjt2325/cameralibrary/JCameraView.java @@ -99,8 +99,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp //缩放梯度 private int zoomGradient = 0; - private boolean firstTouch = true; - private float firstTouchLength = 0; + private float lastTouchLength = -1; public JCameraView(Context context) { this(context, null); @@ -279,7 +278,7 @@ public void surfaceDestroyed(SurfaceHolder holder) { @Override public boolean onTouchEvent(MotionEvent event) { - switch (event.getAction()) { + switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: if (event.getPointerCount() == 1) { //显示对焦指示器 @@ -289,10 +288,9 @@ public boolean onTouchEvent(MotionEvent event) { Log.i("CJT", "ACTION_DOWN = " + 2); } break; + case MotionEvent.ACTION_MOVE: - if (event.getPointerCount() == 1) { - firstTouch = true; - } + if (event.getPointerCount() == 2) { //第一个点 float point_1_X = event.getX(0); @@ -303,20 +301,26 @@ public boolean onTouchEvent(MotionEvent event) { float result = (float) Math.sqrt(Math.pow(point_1_X - point_2_X, 2) + Math.pow(point_1_Y - point_2_Y, 2)); - - if (firstTouch) { - firstTouchLength = result; - firstTouch = false; + if (lastTouchLength == -1) { + lastTouchLength = result; + return true; } - if ((int) (result - firstTouchLength) / zoomGradient != 0) { - firstTouch = true; - machine.zoom(result - firstTouchLength, CameraInterface.TYPE_CAPTURE); + if (Math.abs(lastTouchLength - result) > 3) { + if (lastTouchLength > result) { + //缩小 + machine.zoom(-1, CameraInterface.TYPE_CAPTURE); + } else { + //放大 + machine.zoom(1, CameraInterface.TYPE_CAPTURE); + } + lastTouchLength = result; } -// Log.i("CJT", "result = " + (result - firstTouchLength)); + } else { + lastTouchLength = -1; } break; case MotionEvent.ACTION_UP: - firstTouch = true; + lastTouchLength = -1; break; } return true; diff --git a/cameraapplication/src/main/java/com/zxing/cameraapplication/CameraActivity.java b/cameraapplication/src/main/java/com/zxing/cameraapplication/CameraActivity.java index d152016..da99111 100644 --- a/cameraapplication/src/main/java/com/zxing/cameraapplication/CameraActivity.java +++ b/cameraapplication/src/main/java/com/zxing/cameraapplication/CameraActivity.java @@ -13,8 +13,8 @@ import android.widget.Toast; import com.cjt2325.cameralibrary.JCameraView; -import com.cjt2325.cameralibrary.lisenter.ErrorLisenter; -import com.cjt2325.cameralibrary.lisenter.JCameraLisenter; +import com.cjt2325.cameralibrary.listener.ErrorListener; +import com.cjt2325.cameralibrary.listener.JCameraListener; import com.cjt2325.cameralibrary.util.DeviceUtil; import com.cjt2325.cameralibrary.util.FileUtil; @@ -35,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { jCameraView.setFeatures(JCameraView.BUTTON_STATE_BOTH); jCameraView.setTip("JCameraView Tip"); jCameraView.setMediaQuality(JCameraView.MEDIA_QUALITY_MIDDLE); - jCameraView.setErrorLisenter(new ErrorLisenter() { + jCameraView.setErrorLisenter(new ErrorListener() { @Override public void onError() { //错误监听 @@ -51,7 +51,7 @@ public void AudioPermissionError() { } }); //JCameraView监听 - jCameraView.setJCameraLisenter(new JCameraLisenter() { + jCameraView.setJCameraLisenter(new JCameraListener() { @Override public void captureSuccess(Bitmap bitmap) { //获取图片bitmap diff --git a/gradle.properties b/gradle.properties index 1d3591c..ed62401 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,18 +1,17 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - +## Project-wide Gradle settings. +# # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html - +# # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m +# Default value: -Xmx1024m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - +# # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +#Thu Sep 21 22:50:28 CST 2017 +systemProp.http.proxyHost=127.0.0.1 +systemProp.http.proxyPort=1080