diff --git a/CHANGELOG.md b/CHANGELOG.md index e02d0e910b49b026b606905081ed9d2da19fc18a..82a19750cf1dbdd6a67f60589a958023cb09c35e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,4 @@ +## 0.0.2-SNAPSHOT +ohos 第二个版本,更新SDK6 ## 0.0.1-SNAPSHOT -ohos 第一个版本,完整实现了原库的全部 api \ No newline at end of file +ohos 第一个版本,实现了原库的全部 api \ No newline at end of file diff --git a/README.md b/README.md index 1e8876fc89dca2e836647c8bcba86df6be54592a..0707389e7eddb3db2eb7122bb8c9737859a8f2e3 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ - 项目名称:ImageSelector - 所属系列:OpenHarmony的第三方组件适配移植 - 功能:一个功能强大的图片选择器。支持图片的单选、限数量的多选和不限数量的多选。支持图片预览和图片文件夹的切换。支持在选择图片时调用相机拍照,也支持不用打开相册直接调用相机拍照。 -- 基线版本:Releases 2.2.1 - 项目移植状态:主功能完成 - 调用差异:无 -- 开发版本:sdk5,DevEco Studio2.1 Release +- 开发版本:sdk6,DevEco Studio2.2 Beta1 +- 基线版本:Releases 2.2.1 #### 效果演示 @@ -26,13 +26,13 @@ allprojects { 2.在entry模块的build.gradle文件中, ``` dependencies { - implementation('com.gitee.chinasoft_ohos:ImageSelector-imagepicker:0.0.1-SNAPSHOT') - implementation('com.gitee.chinasoft_ohos:ImageSelector-cameralibrary:0.0.1-SNAPSHOT') - implementation('com.gitee.chinasoft_ohos:ImageSelector-ucrop:0.0.1-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-imagepicker:0.0.2-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-cameralibrary:0.0.2-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-ucrop:0.0.2-SNAPSHOT') ...... } ``` -在sdk5,DevEco Studio2.1 Release下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 +在sdk6,DevEco Studio2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 @@ -107,7 +107,7 @@ CodeCheck代码测试无异常 CloudTest代码测试无异常 -火绒安全病毒安全检测通过 +病毒安全检测通过 当前版本demo功能与原组件基本无差异 @@ -115,4 +115,4 @@ CloudTest代码测试无异常 #### 版本迭代 -- 0.0.1-SNAPSHOT +- 0.0.2-SNAPSHOT diff --git a/build.gradle b/build.gradle index ab2e0e92d039e2d27bdfdf97cab4bc5d05dd98d5..d8bca9bd37232fa7555a360859e1f2f56c54fec0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.huawei.ohos:hap:2.4.4.2' - classpath 'com.huawei.ohos:decctest:1.0.0.6' + classpath 'com.huawei.ohos:hap:2.4.5.0' + classpath 'com.huawei.ohos:decctest:1.2.4.1' } } diff --git a/cameralibrary/build.gradle b/cameralibrary/build.gradle index 25ddf0cf1daa8f1533639ebc05ce352f4019b8ff..7e1e475c1296e7c6d200a45810598ddff583ee7f 100644 --- a/cameralibrary/build.gradle +++ b/cameralibrary/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'com.huawei.ohos.library' ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } diff --git a/cameralibrary/src/main/config.json b/cameralibrary/src/main/config.json index 143adc8bf0da3f775b1cc4b6b5cc3eb9b2f312fd..6795c07e3b15e6b218ad50a400d0fbff1c524752 100644 --- a/cameralibrary/src/main/config.json +++ b/cameralibrary/src/main/config.json @@ -5,11 +5,6 @@ "version": { "code": 1000000, "name": "1.0" - }, - "apiVersion": { - "compatible": 5, - "target": 5, - "releaseType": "Release" } }, "deviceConfig": {}, diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbility.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbility.java index 509f1aa8dcb512394cbc4c8c27735d1e95e2f9b8..f5d541789f6f90be6b1dca765b1ca6778b9c074f 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbility.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbility.java @@ -39,6 +39,11 @@ public class CameraAbility extends Ability { Arrays.asList( SystemPermission.WRITE_USER_STORAGE, SystemPermission.CAMERA, SystemPermission.MICROPHONE)); + /** + * onStart + * + * @param intent intent + */ @Override public void onStart(Intent intent) { super.onStart(intent); @@ -54,6 +59,13 @@ public class CameraAbility extends Ability { } } + /** + * onRequestPermissionsFromUserResult + * + * @param requestCode requestCode + * @param ss ss + * @param grantResults grantResults + */ @Override public void onRequestPermissionsFromUserResult(int requestCode, String[] ss, int[] grantResults) { super.onRequestPermissionsFromUserResult(requestCode, ss, grantResults); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbilitySlice.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbilitySlice.java index f184da2a1a1fa8127f6fcc8a26a0d5f8cc5b636a..463b9545d87704bcd7dfc2ae61d9eac28245a567 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbilitySlice.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraAbilitySlice.java @@ -40,6 +40,11 @@ public class CameraAbilitySlice extends AbilitySlice implements PermissionInterf Arrays.asList( SystemPermission.WRITE_USER_STORAGE, SystemPermission.CAMERA, SystemPermission.MICROPHONE)); + /** + * onStart + * + * @param intent intent + */ @Override public void onStart(Intent intent) { super.onStart(intent); @@ -83,6 +88,9 @@ public class CameraAbilitySlice extends AbilitySlice implements PermissionInterf } } + /** + * onBackPressed + */ @Override protected void onBackPressed() { super.onBackPressed(); @@ -90,6 +98,9 @@ public class CameraAbilitySlice extends AbilitySlice implements PermissionInterf setResult(new Intent()); } + /** + * onActive + */ @Override public void onActive() { super.onActive(); @@ -97,6 +108,11 @@ public class CameraAbilitySlice extends AbilitySlice implements PermissionInterf handCamera(); } + /** + * onForeground + * + * @param intent intent + */ @Override public void onForeground(Intent intent) { super.onForeground(intent); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraInterface.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraInterface.java index cb199787148c6a7a436b539a7f88290c35870a9d..3fc91ed2c624a63de66d4b8bcfe160d07671963d 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraInterface.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CameraInterface.java @@ -272,7 +272,24 @@ public class CameraInterface { private CameraInterface() { findAvailableCameras(); - SELECTED_CAMERA = CAMERA_BACK_POSITION; +// SELECTED_CAMERA = CAMERA_BACK_POSITION; + setSELECTED_CAMERA(CAMERA_BACK_POSITION); + } + + public int getSELECTED_CAMERA() { + return SELECTED_CAMERA; + } + + public void setSELECTED_CAMERA(int SELECTED_CAMERA) { + this.SELECTED_CAMERA = SELECTED_CAMERA; + } + + public int getCAMERA_FRONT_POSITION() { + return CAMERA_FRONT_POSITION; + } + + public void setCAMERA_FRONT_POSITION(int CAMERA_FRONT_POSITION) { + this.CAMERA_FRONT_POSITION = CAMERA_FRONT_POSITION; } /** @@ -354,9 +371,11 @@ public class CameraInterface { */ public synchronized void switchCamera(SurfaceOps holder, float screenProp, CameraMachine machine) { if (SELECTED_CAMERA == CAMERA_BACK_POSITION) { - SELECTED_CAMERA = CAMERA_FRONT_POSITION; +// SELECTED_CAMERA = CAMERA_FRONT_POSITION; + setSELECTED_CAMERA(CAMERA_FRONT_POSITION); } else { - SELECTED_CAMERA = CAMERA_BACK_POSITION; +// SELECTED_CAMERA = CAMERA_BACK_POSITION; + setSELECTED_CAMERA(CAMERA_BACK_POSITION); } doDestroyCamera(); openCamera(machine); @@ -438,7 +457,8 @@ public class CameraInterface { CameraInfo info = mCameraKit.getCameraInfo(cameraId); switch (info.getFacingType()) { case CameraInfo.FacingType.CAMERA_FACING_FRONT: - CAMERA_FRONT_POSITION = info.getFacingType(); +// CAMERA_FRONT_POSITION = info.getFacingType(); + setCAMERA_FRONT_POSITION(info.getFacingType()); break; case CameraInfo.FacingType.CAMERA_FACING_BACK: CAMERA_BACK_POSITION = info.getFacingType(); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CaptureLayout.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CaptureLayout.java index feffa6484836beaaa21eb7e3d764cf6de9a81a03..2553106d5fee10194ae7ce36aa17558277e782fe 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CaptureLayout.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/CaptureLayout.java @@ -5,6 +5,7 @@ import com.flask.colorpicker.cameralibrary.listener.ClickListener; import com.flask.colorpicker.cameralibrary.listener.TypeListener; import com.flask.colorpicker.cameralibrary.util.LogUtil; +import com.flask.colorpicker.cameralibrary.util.NumCalcUtil; import ohos.agp.animation.Animator; import ohos.agp.animation.AnimatorGroup; import ohos.agp.animation.AnimatorProperty; @@ -92,7 +93,7 @@ public class CaptureLayout extends StackLayout { AnimatorProperty propertyT = new AnimatorProperty(); propertyT.moveFromX(mLayout_width / 2f); - propertyT.moveToX(mLayout_width / 2f + mButton_size / 2f); + propertyT.moveToX(NumCalcUtil.add(mLayout_width / 2f , mButton_size / 2f)); propertyT.setTarget(mBtn_confirm); startAnimator(propertyO, propertyT); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/FocusView.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/FocusView.java index 97f92e5eecb2df4ecf99d24dbe2fc205b1167dfb..be8c7087c4ec88458e947d63548a47838fe9affd 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/FocusView.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/FocusView.java @@ -1,5 +1,6 @@ package com.flask.colorpicker.cameralibrary; +import com.flask.colorpicker.cameralibrary.util.NumCalcUtil; import com.flask.colorpicker.cameralibrary.util.ScreenUtils; import ohos.agp.components.AttrSet; @@ -36,11 +37,11 @@ public class FocusView extends Component implements Component.DrawTask { } public void setX(float x) { - setTranslationX(x - getLeft()); + setTranslationX(NumCalcUtil.subtract(x , getLeft())); } public void setY(float y) { - setTranslationY(y - getTop()); + setTranslationY(NumCalcUtil.subtract(y , getTop())); } @Override @@ -51,13 +52,13 @@ public class FocusView extends Component implements Component.DrawTask { canvas.drawLine(new Point(1, getHeight() / 2f), new Point(mSize / 10f, getHeight() / 2f), mPaint); canvas.drawLine( new Point(getWidth() - 2, getHeight() / 2f), - new Point(getWidth() - mSize / 10f, getHeight() / 2f), + new Point(NumCalcUtil.subtract(getWidth() , mSize / 10f), getHeight() / 2f), mPaint); canvas.drawLine(new Point(getWidth() / 2f, 2), new Point(getWidth() / 2f, mSize / 10f), mPaint); canvas.drawLine( new Point(getWidth() / 2f, getHeight() - 2), - new Point(getWidth() / 2f, getHeight() - mSize / 10f), + new Point(getWidth() / 2f, NumCalcUtil.subtract(getHeight() , mSize / 10f)), mPaint); } } diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/JCameraView.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/JCameraView.java index 70e53b602bd27e44a424a0ea7db222761c3f2110..e668990535ecdddbb1593562c72968a457ab538d 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/JCameraView.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/JCameraView.java @@ -9,6 +9,7 @@ import com.flask.colorpicker.cameralibrary.state.CameraMachine; import com.flask.colorpicker.cameralibrary.util.CheckPermission; import com.flask.colorpicker.cameralibrary.util.FileUtil; import com.flask.colorpicker.cameralibrary.util.LogUtil; +import com.flask.colorpicker.cameralibrary.util.NumCalcUtil; import com.flask.colorpicker.cameralibrary.util.ScreenUtils; import com.flask.colorpicker.cameralibrary.view.CameraView; import ohos.agp.animation.AnimatorGroup; @@ -71,7 +72,6 @@ public class JCameraView extends StackLayout private Image mSwitchCamera; private CaptureLayout mCaptureLayout; private FocusView mFocusView; - private Player mMediaPlayer; private int mLayout_width; private float mScreenProp = 0f; @@ -368,15 +368,16 @@ public class JCameraView extends StackLayout float point2Y = event.getPointerPosition(1).getY(); float result = - (float) Math.sqrt(Math.pow(point1X - point2X, 2) + Math.pow(point1Y - point2Y, 2)); + (float) Math.sqrt(Math.pow(NumCalcUtil.subtract(point1X , point2X), 2) + + Math.pow(NumCalcUtil.subtract(point1Y , point2Y), 2)); if (isFirstTouch) { mFirstTouchLength = result; isFirstTouch = false; } - if ((int) (result - mFirstTouchLength) / mZoomGradient != 0) { + if ((int) (NumCalcUtil.subtract(result , mFirstTouchLength)) / mZoomGradient != 0) { isFirstTouch = true; - mMachine.zoom(result - mFirstTouchLength, CameraInterface.TYPE_CAPTURE); + mMachine.zoom(NumCalcUtil.subtract(result , mFirstTouchLength), CameraInterface.TYPE_CAPTURE); } } break; @@ -514,11 +515,6 @@ public class JCameraView extends StackLayout @Override public void stopVideo() { - if (mMediaPlayer != null && mMediaPlayer.isNowPlaying()) { - mMediaPlayer.stop(); - mMediaPlayer.release(); - mMediaPlayer = null; - } } @Override @@ -530,17 +526,17 @@ public class JCameraView extends StackLayout if (pointX < mFocusView.getWidth() / 2f) { pointX = mFocusView.getWidth() / 2f; } - if (pointX > mLayout_width - mFocusView.getWidth() / 2f) { - pointX = mLayout_width - mFocusView.getWidth() / 2f; + if (pointX > NumCalcUtil.subtract(mLayout_width , mFocusView.getWidth() / 2f)) { + pointX = NumCalcUtil.subtract(mLayout_width , mFocusView.getWidth() / 2f); } if (pointY < mFocusView.getWidth() / 2f) { pointY = mFocusView.getWidth() / 2f; } - if (pointY > mCaptureLayout.getTop() - mFocusView.getWidth() / 2f) { - pointY = mCaptureLayout.getTop() - mFocusView.getWidth() / 2f; + if (pointY > NumCalcUtil.subtract(mCaptureLayout.getTop() , mFocusView.getWidth() / 2f)) { + pointY = NumCalcUtil.subtract(mCaptureLayout.getTop() , mFocusView.getWidth() / 2f); } - mFocusView.setX(pointX - mFocusView.getWidth() / 2f); - mFocusView.setY(pointY - mFocusView.getHeight() / 2f); + mFocusView.setX(NumCalcUtil.subtract(pointX , mFocusView.getWidth() / 2f)); + mFocusView.setY(NumCalcUtil.subtract(pointY , mFocusView.getHeight() / 2f)); AnimatorProperty scaleAnimation = new AnimatorProperty(mFocusView); scaleAnimation.scaleX(1f).scaleX(0.6f); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/ReturnButton.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/ReturnButton.java index 636d787fa60feb4eccd5362c0794b73585218e54..b9c307cca254e0acd634132d22a9d26088f9ffad 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/ReturnButton.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/ReturnButton.java @@ -1,5 +1,6 @@ package com.flask.colorpicker.cameralibrary; +import com.flask.colorpicker.cameralibrary.util.NumCalcUtil; import ohos.agp.components.Component; import ohos.agp.render.Canvas; import ohos.agp.render.Paint; @@ -45,8 +46,8 @@ public class ReturnButton extends Component implements Component.DrawTask { @Override public void onDraw(Component component, Canvas canvas) { mPath.moveTo(mStrokeWidth, mStrokeWidth / 2); - mPath.lineTo(mCenter_X, mCenter_Y - mStrokeWidth / 2); - mPath.lineTo(mSize - mStrokeWidth, mStrokeWidth / 2); + mPath.lineTo(mCenter_X, NumCalcUtil.subtract(mCenter_Y , mStrokeWidth / 2)); + mPath.lineTo(NumCalcUtil.subtract(mSize , mStrokeWidth), mStrokeWidth / 2); canvas.drawPath(mPath, mPaint); } } diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/TypeButton.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/TypeButton.java index de96d7a4b05466ebefb63d7df8c910ce59a34c22..48a9d5be451e249e87a291af7f283475ae2fb0b2 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/TypeButton.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/TypeButton.java @@ -1,5 +1,6 @@ package com.flask.colorpicker.cameralibrary; +import com.flask.colorpicker.cameralibrary.util.NumCalcUtil; import ohos.agp.components.Component; import ohos.agp.render.Canvas; import ohos.agp.render.Paint; @@ -47,7 +48,8 @@ public class TypeButton extends Component implements Component.DrawTask { mPath = new Path(); mStrokeWidth = size / 50f; mIndex = mButton_size / 12f; - mRectF = new RectFloat(mCenter_X, mCenter_Y - mIndex, mCenter_X + mIndex * 2, mCenter_Y + mIndex); + mRectF = new RectFloat(mCenter_X, NumCalcUtil.subtract(mCenter_Y , mIndex) + , NumCalcUtil.add(mCenter_X , mIndex * 2), NumCalcUtil.add(mCenter_Y , mIndex)); addDrawTask(this); } @@ -65,17 +67,17 @@ public class TypeButton extends Component implements Component.DrawTask { mPaint.setStyle(Paint.Style.STROKE_STYLE); mPaint.setStrokeWidth(mStrokeWidth); - mPath.moveTo(mCenter_X - mIndex / 7, mCenter_Y + mIndex); - mPath.lineTo(mCenter_X + mIndex, mCenter_Y + mIndex); + mPath.moveTo(NumCalcUtil.subtract(mCenter_X , mIndex / 7), NumCalcUtil.add(mCenter_Y , mIndex)); + mPath.lineTo(NumCalcUtil.add(mCenter_X , mIndex), NumCalcUtil.add(mCenter_Y , mIndex)); mPath.arcTo(mRectF, 90, -180); - mPath.lineTo(mCenter_X - mIndex, mCenter_Y - mIndex); + mPath.lineTo(NumCalcUtil.subtract(mCenter_X , mIndex), NumCalcUtil.subtract(mCenter_Y , mIndex)); canvas.drawPath(mPath, mPaint); mPaint.setStyle(Paint.Style.FILL_STYLE); mPath.reset(); - mPath.moveTo(mCenter_X - mIndex, (float) (mCenter_Y - mIndex * 1.5)); - mPath.lineTo(mCenter_X - mIndex, (float) (mCenter_Y - mIndex / 2.3)); - mPath.lineTo((float) (mCenter_X - mIndex * 1.6), mCenter_Y - mIndex); + mPath.moveTo(NumCalcUtil.subtract(mCenter_X , mIndex), (float) (mCenter_Y - mIndex * 1.5)); + mPath.lineTo(NumCalcUtil.subtract(mCenter_X , mIndex), (float) (mCenter_Y - mIndex / 2.3)); + mPath.lineTo((float) (mCenter_X - mIndex * 1.6), NumCalcUtil.subtract(mCenter_Y , mIndex)); mPath.close(); canvas.drawPath(mPath, mPaint); } @@ -90,10 +92,10 @@ public class TypeButton extends Component implements Component.DrawTask { mPaint.setColor(new Color(0xFF00CC00)); mPaint.setStrokeWidth(mStrokeWidth); - mPath.moveTo(mCenter_X - mButton_size / 6f, mCenter_Y); - mPath.lineTo(mCenter_X - mButton_size / 21.2f, mCenter_Y + mButton_size / 7.7f); - mPath.lineTo(mCenter_X + mButton_size / 4.0f, mCenter_Y - mButton_size / 8.5f); - mPath.lineTo(mCenter_X - mButton_size / 21.2f, mCenter_Y + mButton_size / 9.4f); + mPath.moveTo(NumCalcUtil.subtract(mCenter_X , mButton_size / 6f), mCenter_Y); + mPath.lineTo(NumCalcUtil.subtract(mCenter_X , mButton_size / 21.2f), NumCalcUtil.add(mCenter_Y , mButton_size / 7.7f)); + mPath.lineTo(NumCalcUtil.add(mCenter_X , mButton_size / 4.0f), NumCalcUtil.subtract(mCenter_Y , mButton_size / 8.5f)); + mPath.lineTo(NumCalcUtil.subtract(mCenter_X , mButton_size / 21.2f), NumCalcUtil.add(mCenter_Y , mButton_size / 9.4f)); mPath.close(); canvas.drawPath(mPath, mPaint); } diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/BorrowPictureState.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/BorrowPictureState.java index 0060508429eb6c09feac8699e474817c5e7b279b..47b796d9db416e984f99f2711df78efb05204dd7 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/BorrowPictureState.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/BorrowPictureState.java @@ -15,6 +15,12 @@ public class BorrowPictureState implements State { this.mMachine = machine; } + /** + * start + * + * @param holder holder + * @param screenProp screenProp + */ @Override public void start(SurfaceOps holder, float screenProp) { CameraInterface.getInstance().doStartPreview(holder, screenProp); @@ -42,6 +48,12 @@ public class BorrowPictureState implements State { @Override public void stopRecord(boolean isShort, long time) {} + /** + * cancel + * + * @param holder holder + * @param screenProp screenProp + */ @Override public void cancel(SurfaceOps holder, float screenProp) { CameraInterface.getInstance().doStartPreview(holder, screenProp); @@ -49,15 +61,29 @@ public class BorrowPictureState implements State { mMachine.setState(mMachine.getPreviewState()); } + /** + * confirm + */ @Override public void confirm() { mMachine.getView().confirmState(JCameraView.TYPE_PICTURE); mMachine.setState(mMachine.getPreviewState()); } + /** + * zoom + * + * @param zoom zoom + * @param type type + */ @Override public void zoom(float zoom, int type) {} + /** + * flash + * + * @param mode mode + */ @Override public void flash(int mode) {} } diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/CameraMachine.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/CameraMachine.java index 67fcc09d40d619a1b9d5505ae0674697fd33a736..3d153e737d9a240bc3d98614a5abf06d082a4ffc 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/CameraMachine.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/CameraMachine.java @@ -1,6 +1,5 @@ package com.flask.colorpicker.cameralibrary.state; -import com.flask.colorpicker.cameralibrary.CameraInterface; import com.flask.colorpicker.cameralibrary.view.CameraView; import ohos.agp.graphics.SurfaceOps; @@ -72,36 +71,66 @@ public class CameraMachine implements State { return mPreviewState; } + /** + * start + * + * @param holder holder + * @param screenProp screenProp + */ @Override public void start(SurfaceOps holder, float screenProp) { mState.start(holder, screenProp); } + /** + * stop + */ @Override public void stop() { mState.stop(); } + /** + * focus + * + * @param xx xx + * @param yy yy + */ @Override public void focus(float xx, float yy) { mState.focus(xx, yy); } + /** + * switchCamera + * + * @param holder holder + * @param screenProp screenProp + */ @Override public void switchCamera(SurfaceOps holder, float screenProp) { mState.switchCamera(holder, screenProp); } + /** + * restart + */ @Override public void restart() { mState.restart(); } + /** + * capture + */ @Override public void capture() { mState.capture(); } + /** + * + */ @Override public void record() { mState.record(); diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/State.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/State.java index c3dabc1b08dfda39f86f070098845f6cbce1f795..5ea9b913932977ff20a045e92a5f17feefa93814 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/State.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/state/State.java @@ -1,5 +1,4 @@ package com.flask.colorpicker.cameralibrary.state; -import com.flask.colorpicker.cameralibrary.CameraInterface; import ohos.agp.graphics.SurfaceOps; diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/CheckPermission.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/CheckPermission.java index f0ab1f680fd72af5c26ddac5f9091a35538312b1..d5694a1d71a44d824fcfdef472e229fea39b442d 100644 --- a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/CheckPermission.java +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/CheckPermission.java @@ -74,37 +74,34 @@ public class CheckPermission { private static int handAudioRecord(int minBuffer, AudioCapturer audioCapturer) { short[] point = new short[minBuffer]; int readSize; - try { - audioCapturer.start(); // 检测是否可以进入初始化状态 - } catch (Exception e) { - if (audioCapturer != null) { + if (audioCapturer == null) { + return 0; + } + try { + audioCapturer.start(); // 检测是否可以进入初始化状态 + } catch (Exception e) { audioCapturer.release(); + return STATE_NO_PERMISSION; } - return STATE_NO_PERMISSION; - } - if (audioCapturer.getState() != AudioCapturer.State.STATE_RECORDING) { - // 6.0以下机型都会返回此状态,故使用时需要判断bulid版本 - // 检测是否在录音中 - if (audioCapturer != null) { + if (audioCapturer.getState() != AudioCapturer.State.STATE_RECORDING) { + // 6.0以下机型都会返回此状态,故使用时需要判断bulid版本 + // 检测是否在录音中 audioCapturer.stop(); audioCapturer.release(); LogUtil.debug(LogUtil.DEFAULT_TAG, "The recorder is in use"); - } - return STATE_RECORDING; - } else { - // 检测是否可以获取录音结果 - readSize = audioCapturer.read(point, 0, point.length); - if (audioCapturer != null) { + return STATE_RECORDING; + } else { + // 检测是否可以获取录音结果 + readSize = audioCapturer.read(point, 0, point.length); audioCapturer.stop(); audioCapturer.release(); + if (readSize <= 0) { + LogUtil.error(LogUtil.DEFAULT_TAG, "audioRecord result is empty"); + return STATE_NO_PERMISSION; + } else { + return STATE_SUCCESS; + } } - if (readSize <= 0) { - LogUtil.error(LogUtil.DEFAULT_TAG, "audioRecord result is empty"); - return STATE_NO_PERMISSION; - } else { - return STATE_SUCCESS; - } - } } /** diff --git a/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/NumCalcUtil.java b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/NumCalcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..9bc55e440d8806497b1c03ecd8606d96f86b62cd --- /dev/null +++ b/cameralibrary/src/main/java/com/flask/colorpicker/cameralibrary/util/NumCalcUtil.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain an copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.flask.colorpicker.cameralibrary.util; + +import java.math.BigDecimal; + +/** + * 浮点数计算工具类 + * + * @since 2021-05-17 + */ +public class NumCalcUtil { + private NumCalcUtil() { + } + /** + * 加法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float add(float num1, float num2) { + return new BigDecimal(num1).add(new BigDecimal(num2)).floatValue(); + } + + /** + * 减法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float subtract(float num1, float num2) { + return new BigDecimal(num1).subtract(new BigDecimal(num2)).floatValue(); + } + + /** + * 除法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float divide(float num1, float num2) { + return new BigDecimal(num1).divide(new BigDecimal(num2)).floatValue(); + } + + /** + * 乘法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float multiply(float num1, float num2) { + return new BigDecimal(num1).multiply(new BigDecimal(num2)).floatValue(); + } +} diff --git a/entry/build.gradle b/entry/build.gradle index f3dd397ad2399a3b59ed51eba679bfc3d8fe6496..2852f48a7fb18f22d30fe3a88c9c1d0e07358687 100644 --- a/entry/build.gradle +++ b/entry/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.huawei.ohos.decctest' ohos { signingConfigs { } - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } @@ -28,9 +28,9 @@ dependencies { implementation "io.openharmony.tpc.thirdlib:imageloader:1.0.0" implementation 'io.openharmony.tpc.thirdlib:glide:1.0.3' - implementation('com.gitee.chinasoft_ohos:ImageSelector-imagepicker:0.0.1-SNAPSHOT') - implementation('com.gitee.chinasoft_ohos:ImageSelector-cameralibrary:0.0.1-SNAPSHOT') - implementation('com.gitee.chinasoft_ohos:ImageSelector-ucrop:0.0.1-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-imagepicker:0.0.2-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-cameralibrary:0.0.2-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:ImageSelector-ucrop:0.0.2-SNAPSHOT') } decc { supportType = ['html', 'xml'] diff --git a/entry/src/main/config.json b/entry/src/main/config.json index f2ee0a646fc0ea41ac3b68ed0b5f95677a62a4b6..25371e6ac69c53e165fc1742b2a29a4f2d6eaa60 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -5,11 +5,6 @@ "version": { "code": 1000000, "name": "1.0" - }, - "apiVersion": { - "compatible": 5, - "target": 5, - "releaseType": "Release" } }, "deviceConfig": {}, diff --git a/entry/src/ohosTest/config.json b/entry/src/ohosTest/config.json index 3c611199d9cadd2d06d1dd62b3d1ddb9fdb721bb..d4b1e2b7b4b1c26a12fa1d8db6acca9d054f01ed 100644 --- a/entry/src/ohosTest/config.json +++ b/entry/src/ohosTest/config.json @@ -5,11 +5,6 @@ "version": { "code": 1, "name": "1.0" - }, - "apiVersion": { - "compatible": 5, - "target": 5, - "releaseType": "Release" } }, "deviceConfig": {}, diff --git a/imagepicker/build.gradle b/imagepicker/build.gradle index 7656e5578b4471bf2df0259252da8217f00f62ca..9d1f78ac2d88027edf6b0ac68362c481fb5d6815 100644 --- a/imagepicker/build.gradle +++ b/imagepicker/build.gradle @@ -7,7 +7,7 @@ rootProject.ext{ DEFAULT_VERSION = '1.0.0' } ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } diff --git a/imagepicker/src/main/config.json b/imagepicker/src/main/config.json index b4021ed7c4d87c0f37053490692aa948307791dd..f2beae96fba30c1d2d287ea7b128c91380829e10 100644 --- a/imagepicker/src/main/config.json +++ b/imagepicker/src/main/config.json @@ -5,11 +5,6 @@ "version": { "code": 1000000, "name": "1.0" - }, - "apiVersion": { - "compatible": 5, - "target": 5, - "releaseType": "Release" } }, "deviceConfig": {}, @@ -23,14 +18,5 @@ "moduleName": "imagepicker", "moduleType": "har" } - }, - "abilities": [ - { - "name": "com.lzy.imagepicker.ui.ImageGridAbility", - "orientation": "unspecified", - "formEnabled": false, - "type": "page", - "launchType": "standard" - } - ] + } } \ No newline at end of file diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/DataHolder.java b/imagepicker/src/main/java/com/lzy/imagepicker/DataHolder.java index f9009490636379f36016563c78944847b0ce201c..2094b377155b14f8689616f13ca42c88e1e6361a 100644 --- a/imagepicker/src/main/java/com/lzy/imagepicker/DataHolder.java +++ b/imagepicker/src/main/java/com/lzy/imagepicker/DataHolder.java @@ -21,11 +21,9 @@ public class DataHolder { private final Map> data; public static DataHolder getInstance() { - if (mInstance == null){ - synchronized (DataHolder.class){ - if (mInstance == null){ - mInstance = new DataHolder(); - } + synchronized (DataHolder.class){ + if (mInstance == null){ + mInstance = new DataHolder(); } } return mInstance; diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/ImagePicker.java b/imagepicker/src/main/java/com/lzy/imagepicker/ImagePicker.java index fb9d1a4c18cee70a64bf0937008157046bf70ff7..012712aac89c909718fd1f797b6d9c1f48033707 100644 --- a/imagepicker/src/main/java/com/lzy/imagepicker/ImagePicker.java +++ b/imagepicker/src/main/java/com/lzy/imagepicker/ImagePicker.java @@ -71,11 +71,9 @@ public class ImagePicker { } public static ImagePicker getInstance() { - if (mInstance == null) { - synchronized (ImagePicker.class) { - if (mInstance == null) { - mInstance = new ImagePicker(); - } + synchronized (ImagePicker.class) { + if (mInstance == null) { + mInstance = new ImagePicker(); } } return mInstance; diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageFolder.java b/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageFolder.java index 02fded0afde23d23bd25febd25cf01afbb7032d7..5371cd8b002331800d709448eed2179972ff9b10 100644 --- a/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageFolder.java +++ b/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageFolder.java @@ -33,4 +33,9 @@ public class ImageFolder implements Serializable { } } + + @Override + public int hashCode() { + return super.hashCode(); + } } diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageItem.java b/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageItem.java index 929af199efb23f201cf53d0d99348a45f5d5b3a6..1b878043b2b995efc9eac9d1cf0e9c8939c0834b 100644 --- a/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageItem.java +++ b/imagepicker/src/main/java/com/lzy/imagepicker/bean/ImageItem.java @@ -40,8 +40,12 @@ public class ImageItem implements Serializable, Sequenceable { return super.equals(o); } + @Override + public int hashCode() { + return super.hashCode(); + } -// @Override + // @Override // public int describeContents() { // return 0; // } diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/util/NumCalcUtil.java b/imagepicker/src/main/java/com/lzy/imagepicker/util/NumCalcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..de5bae1176ada7dccc35aed46fcedcd906b1197b --- /dev/null +++ b/imagepicker/src/main/java/com/lzy/imagepicker/util/NumCalcUtil.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain an copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.lzy.imagepicker.util; + +import java.math.BigDecimal; + +/** + * 浮点数计算工具类 + * + * @since 2021-05-17 + */ +public class NumCalcUtil { + private NumCalcUtil() { + } + /** + * 加法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float add(float num1, float num2) { + return new BigDecimal(num1).add(new BigDecimal(num2)).floatValue(); + } + + /** + * 减法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float subtract(float num1, float num2) { + return new BigDecimal(num1).subtract(new BigDecimal(num2)).floatValue(); + } + + /** + * 除法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float divide(float num1, float num2) { + return new BigDecimal(num1).divide(new BigDecimal(num2)).floatValue(); + } + + /** + * 乘法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float multiply(float num1, float num2) { + return new BigDecimal(num1).multiply(new BigDecimal(num2)).floatValue(); + } +} diff --git a/imagepicker/src/main/java/com/lzy/imagepicker/view/CropImageView.java b/imagepicker/src/main/java/com/lzy/imagepicker/view/CropImageView.java index 213e1674171ed05f98ca672233a72f5ec6b7e787..d302659abd3fb2c6681d90a383cb3e07013c0366 100644 --- a/imagepicker/src/main/java/com/lzy/imagepicker/view/CropImageView.java +++ b/imagepicker/src/main/java/com/lzy/imagepicker/view/CropImageView.java @@ -1,9 +1,9 @@ package com.lzy.imagepicker.view; +import com.lzy.imagepicker.util.NumCalcUtil; import com.lzy.imagepicker.util.ResUtil; import com.lzy.imagepicker.util.Utils; import ohos.agp.components.AttrSet; -import ohos.agp.components.Component; import ohos.agp.components.Image; import ohos.agp.components.element.Element; import ohos.agp.render.*; @@ -89,7 +89,7 @@ public class CropImageView extends Image { private float mMaxScale = MAX_SCALE;//程序根据不同图片的大小,动态得到的最大缩放比 private final boolean isInited; //是否经过了 onSizeChanged 初始化 private boolean mSaving = false; //是否正在保存 - private static final EventHandler mHandler = new InnerHandler(); + private final EventHandler mHandler = new InnerHandler(); private PixelMap pixelMap; private int mPointerIndex1, mPointerIndex2; @@ -209,8 +209,8 @@ public class CropImageView extends Image { //计算出焦点框的中点的坐标和上、下、左、右边的x或y的值 int viewWidth = getWidth(); int viewHeight = getHeight(); - float midPointX = viewWidth / 2; - float midPointY = viewHeight / 2; + int midPointX = viewWidth / 2; + int midPointY = viewHeight / 2; mFocusMidPoint = new Point(midPointX, midPointY); if (mStyle == Style.CIRCLE) { @@ -219,10 +219,10 @@ public class CropImageView extends Image { mFocusHeight = focusSize; } - mFocusRect.left = mFocusMidPoint.getPointX() - mFocusWidth; - mFocusRect.right = mFocusMidPoint.getPointX() + mFocusWidth; - mFocusRect.top = mFocusMidPoint.getPointY() - mFocusHeight / 2; - mFocusRect.bottom = mFocusMidPoint.getPointY() + mFocusHeight / 2; + mFocusRect.left = NumCalcUtil.subtract(mFocusMidPoint.getPointX() , mFocusWidth); + mFocusRect.right = NumCalcUtil.add(mFocusMidPoint.getPointX() , mFocusWidth); + mFocusRect.top = NumCalcUtil.subtract(mFocusMidPoint.getPointY() , mFocusHeight / 2f); + mFocusRect.bottom = NumCalcUtil.add(mFocusMidPoint.getPointY() , mFocusHeight / 2f); //适配焦点框的缩放比例(图片的最小边不小于焦点框的最小边) float fitFocusScale = getScale(mImageWidth, mImageHeight, mFocusWidth, mFocusHeight, true); @@ -237,13 +237,13 @@ public class CropImageView extends Image { float scale = Math.max(fitViewScale, fitFocusScale); //图像中点为中心进行缩放 - matrix.setScale(scale, scale, mImageWidth / 2, mImageHeight / 2); + matrix.setScale(scale, scale, mImageWidth / 2f, mImageHeight / 2f); setScaleMode(scale == fitViewScale ? ScaleMode.INSIDE : ScaleMode.CENTER); // setScale(mImageWidth / 2, mImageHeight / 2); float[] mImageMatrixValues = new float[9]; matrix.getElements(mImageMatrixValues); //获取缩放后的mImageMatrix的值 - float transX = mFocusMidPoint.getPointX() - (mImageMatrixValues[2] + mImageWidth * mImageMatrixValues[0] / 2); //X轴方向的位移 - float transY = mFocusMidPoint.getPointY() - (mImageMatrixValues[5] + mImageHeight * mImageMatrixValues[4] / 2); //Y轴方向的位移 + float transX = NumCalcUtil.subtract(mFocusMidPoint.getPointX() , (NumCalcUtil.add(mImageMatrixValues[2] , mImageWidth * mImageMatrixValues[0] / 2))); //X轴方向的位移 + float transY = NumCalcUtil.subtract(mFocusMidPoint.getPointY() , (NumCalcUtil.add(mImageMatrixValues[5] , mImageHeight * mImageMatrixValues[4] / 2))); //Y轴方向的位移 matrix.postTranslate(transX, transY); // setImageMatrix(matrix); @@ -269,7 +269,8 @@ public class CropImageView extends Image { if (event.getIndex() > 1) break; pA.modify(event.getPointerPosition(0).getX(), event.getPointerPosition(0).getY()); pB.modify(event.getPointerPosition(1).getX(), event.getPointerPosition(1).getY()); - midPoint.modify((pA.getPointX() + pB.getPointX()) / 2, (pA.getPointY() + pB.getPointY()) / 2); + midPoint.modify((NumCalcUtil.add(pA.getPointX() , pB.getPointX())) / 2 + , (NumCalcUtil.add(pA.getPointY() , pB.getPointY())) / 2); mPointerIndex2 = event.getPointerId(event.getIndex()); oldDist = spacing(pA, pB); @@ -339,6 +340,8 @@ public class CropImageView extends Image { * */ private float getScale(int bitmapWidth, int bitmapHeight, int min_width, int min_height, boolean isMinScale) { float scale; +// float scaleX = NumCalcUtil.divide(min_width , bitmapWidth); +// float scaleY = NumCalcUtil.divide(min_height , bitmapHeight); float scaleX = (float) min_width / bitmapWidth; float scaleY = (float) min_height / bitmapHeight; if (isMinScale) { @@ -356,17 +359,17 @@ public class CropImageView extends Image { private void fixScale() { float imageMatrixValues[] = new float[9]; matrix.getElements(imageMatrixValues); - float currentScale = Math.abs(imageMatrixValues[0]) + Math.abs(imageMatrixValues[1]); + float currentScale = NumCalcUtil.add(Math.abs(imageMatrixValues[0]) , Math.abs(imageMatrixValues[1])); float minScale = getScale(mRotatedImageWidth, mRotatedImageHeight, mFocusWidth, mFocusHeight, true); mMaxScale = minScale * MAX_SCALE; //保证图片最小是占满中间的焦点空间 if (currentScale < minScale) { - float scale = minScale / currentScale; + float scale = NumCalcUtil.divide(minScale , currentScale); matrix.postScale(scale, scale); setScale(scale, scale); } else if (currentScale > mMaxScale) { - float scale = mMaxScale / currentScale; + float scale = NumCalcUtil.divide(mMaxScale , currentScale); matrix.postScale(scale, scale); setScale(scale, scale); } @@ -380,14 +383,14 @@ public class CropImageView extends Image { matrix.mapRect(imageRect); //获取当前图片(缩放以后的)相对于当前控件的位置区域,超过控件的上边缘或左边缘为负 float deltaX = 0, deltaY = 0; if (imageRect.left > mFocusRect.left) { - deltaX = -imageRect.left + mFocusRect.left; + deltaX = NumCalcUtil.add(-imageRect.left , mFocusRect.left); } else if (imageRect.right < mFocusRect.right) { - deltaX = -imageRect.right + mFocusRect.right; + deltaX = NumCalcUtil.add(-imageRect.right , mFocusRect.right); } if (imageRect.top > mFocusRect.top) { - deltaY = -imageRect.top + mFocusRect.top; + deltaY = NumCalcUtil.add(-imageRect.top , mFocusRect.top); } else if (imageRect.bottom < mFocusRect.bottom) { - deltaY = -imageRect.bottom + mFocusRect.bottom; + deltaY = NumCalcUtil.add(-imageRect.bottom , mFocusRect.bottom); } // setTranslation(deltaX, deltaY); matrix.postTranslate(deltaX, deltaY); @@ -400,7 +403,7 @@ public class CropImageView extends Image { private float maxPostScale() { float imageMatrixValues[] = new float[9]; matrix.getElements(imageMatrixValues); - float curScale = Math.abs(imageMatrixValues[0]) + Math.abs(imageMatrixValues[1]); + float curScale = NumCalcUtil.add(Math.abs(imageMatrixValues[0]) , Math.abs(imageMatrixValues[1])); return mMaxScale / curScale; } @@ -413,9 +416,9 @@ public class CropImageView extends Image { * @return 两点之间的距离 */ private float spacing(float x1, float y1, float x2, float y2) { - float x = x1 - x2; - float y = y1 - y2; - return (float) Math.sqrt(x * x + y * y); + float x = NumCalcUtil.subtract(x1 , x2); + float y = NumCalcUtil.subtract(y1 , y2); + return (float) Math.sqrt(NumCalcUtil.add(x * x , y * y)); } /** @@ -443,7 +446,6 @@ public class CropImageView extends Image { int sumRotateLevel = 0; pixelMap = rotate(pixelMap, sumRotateLevel * 90); //最好用level,因为角度可能不是90的整数 return makeCropBitmap(pixelMap, mFocusRect, getImageMatrixRect(), expectWidth, exceptHeight, isSaveRectangle); - } /** @@ -634,7 +636,7 @@ public class CropImageView extends Image { croppedImage.release(); } - private static class InnerHandler extends EventHandler { + private class InnerHandler extends EventHandler { public InnerHandler() { super(EventRunner.getMainEventRunner()); } @@ -656,7 +658,7 @@ public class CropImageView extends Image { /** * 图片保存完成的监听 */ - private static OnBitmapSaveCompleteListener mListener; + private OnBitmapSaveCompleteListener mListener; public interface OnBitmapSaveCompleteListener { void onBitmapSaveSuccess(File file); diff --git a/ucrop/build.gradle b/ucrop/build.gradle index 0edd4ff8af5b8b0b28ecb8da36535fb1fd42417d..81957aca47f41fb7c0c07d14b9ccfa86b3d8a768 100644 --- a/ucrop/build.gradle +++ b/ucrop/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'com.huawei.ohos.library' ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } diff --git a/ucrop/src/main/config.json b/ucrop/src/main/config.json index 62be8b6bbd95474e021277884df359614051468b..6053810078c46c7c80a42962d270de44b29921a8 100644 --- a/ucrop/src/main/config.json +++ b/ucrop/src/main/config.json @@ -5,11 +5,6 @@ "version": { "code": 1000000, "name": "1.0" - }, - "apiVersion": { - "compatible": 3, - "target": 4, - "releaseType": "Release" } }, "deviceConfig": {}, diff --git a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java index 3177d1877baa99f491e4c3cb1ed1cacfe5eac4c2..8f50e63b21bfb39ff6db84c68c57842f81dd0df4 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/callback/BitmapCropCallback.java @@ -1,8 +1,5 @@ package com.yalantis.ucrop.callback; -import ohos.utils.net.Uri; - - public interface BitmapCropCallback { void onCropFailure( Throwable t); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java index 2ea135d1353884e64858ed476a543271b5086115..eddd85ef2f3770fb4d5a7c91bd1b463710a88a61 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapCropTask.java @@ -1,5 +1,6 @@ package com.yalantis.ucrop.task; +import com.yalantis.ucrop.util.NumCalcUtil; import com.yalantis.ucrop.view.CropResult; import ohos.aafwk.ability.DataAbilityHelper; import ohos.app.Context; @@ -25,6 +26,7 @@ import com.yalantis.ucrop.util.LogUtils; import java.io.*; import java.lang.ref.WeakReference; +import java.math.BigDecimal; /** * Crops part of image that fills the crop bounds. @@ -48,8 +50,8 @@ public class BitmapCropTask implements CropResult{ public final float mCurrentAngle; private final int mMaxResultImageSizeX, mMaxResultImageSizeY; - public static String mImageInputPath = null; - public static String mImageOutputPath = null; + public String mImageInputPath = null; + public String mImageOutputPath = null; private final BitmapCropCallback mCropCallback; private CropResult cropResult; @@ -74,6 +76,9 @@ public class BitmapCropTask implements CropResult{ mCropCallback = cropCallback; } + /** + * doInBackground + */ public void doInBackground(){ EventRunner eventRunner = EventRunner.create(); EventHandler handler = new EventHandler(eventRunner); @@ -100,7 +105,11 @@ public class BitmapCropTask implements CropResult{ }); } - + /** + * crop + * + * @throws IOException + */ public void crop() throws IOException { // Downsize if needed if (mMaxResultImageSizeX > 0 && mMaxResultImageSizeY > 0) { @@ -158,8 +167,10 @@ public class BitmapCropTask implements CropResult{ LogUtils.LogInfo("qqqqqqq:","mViewBitmap"+ mViewBitmap); } - int cropOffsetX = Math.round((mCropRect.left - mCurrentImageRect.left) / mCurrentScale); - int cropOffsetY = Math.round((mCropRect.top - mCurrentImageRect.top) / mCurrentScale); + int cropOffsetX = Math.round((NumCalcUtil.subtract(mCropRect.left , mCurrentImageRect.left)) / mCurrentScale); + int cropOffsetY = Math.round((NumCalcUtil.subtract(mCropRect.top , mCurrentImageRect.top)) / mCurrentScale); +// int mCroppedImageWidth = Math.round(NumCalcUtil.divide(mCropRect.getWidth(),mCurrentScale)); +// int mCroppedImageHeight = Math.round(NumCalcUtil.divide(mCropRect.getHeight(),mCurrentScale)); int mCroppedImageWidth = Math.round(mCropRect.getWidth() / mCurrentScale); int mCroppedImageHeight = Math.round(mCropRect.getHeight() / mCurrentScale); @@ -209,10 +220,10 @@ public class BitmapCropTask implements CropResult{ int pixelError = 1; pixelError += Math.round(Math.max(width, height) / 1000f); return (mMaxResultImageSizeX > 0 && mMaxResultImageSizeY > 0) - || Math.abs(mCropRect.left - mCurrentImageRect.left) > pixelError - || Math.abs(mCropRect.top - mCurrentImageRect.top) > pixelError - || Math.abs(mCropRect.bottom - mCurrentImageRect.bottom) > pixelError - || Math.abs(mCropRect.right - mCurrentImageRect.right) > pixelError + || Math.abs(NumCalcUtil.subtract(mCropRect.left,mCurrentImageRect.left)) > pixelError + || Math.abs(NumCalcUtil.subtract(mCropRect.top , mCurrentImageRect.top)) > pixelError + || Math.abs(NumCalcUtil.subtract(mCropRect.bottom , mCurrentImageRect.bottom)) > pixelError + || Math.abs(NumCalcUtil.subtract(mCropRect.right , mCurrentImageRect.right)) > pixelError || mCurrentAngle != 0; } @@ -278,6 +289,15 @@ public class BitmapCropTask implements CropResult{ imagePacker.finalizePacking(); } + /** + * _loadImage + * + * @param context context + * @param file file + * @param size size + * @param degrees degrees + * @return _loadImage + */ public PixelMap _loadImage(Context context, File file, Size size, float degrees) { System.out.println(context); System.out.println(size); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java index f0f77a963dcf577091f5121732abdc348eb50781..64b545438c55e7c17b43237a6a08515405398c04 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/task/BitmapLoadTask.java @@ -62,7 +62,9 @@ public class BitmapLoadTask { mBitmapLoadCallback = loadCallback; } - //原AsyncTask的doInBackground + /** + * 原AsyncTask的doInBackground + */ public void doInBackground(){ EventRunner eventRunner = EventRunner.create(); EventHandler handler = new EventHandler(eventRunner); @@ -188,22 +190,18 @@ public class BitmapLoadTask { private void processInputUri() throws NullPointerException, IOException { - String inputUriScheme = mInputUri.getScheme(); - if ("http".equals(inputUriScheme) || "https".equals(inputUriScheme)) { - if(mInputUri != null && mOutputUri != null) { - downloadFile(mInputUri, mOutputUri); + if(mInputUri != null && mOutputUri != null) { + String inputUriScheme = mInputUri.getScheme(); + if ("http".equals(inputUriScheme) || "https".equals(inputUriScheme)) { + downloadFile(mInputUri, mOutputUri); + } else if ("content".equals(inputUriScheme)) { + copyFile(mInputUri, mOutputUri); + } else if ("dataability".equals(inputUriScheme)) { + copyFile(mInputUri, mOutputUri); + } else if (!"file".equals(inputUriScheme)) { + LogUtils.LogError(TAG, "Invalid Uri scheme " + inputUriScheme); + throw new IllegalArgumentException("Invalid Uri scheme" + inputUriScheme); } - } else if ("content".equals(inputUriScheme)) { - if(mInputUri != null && mOutputUri != null) { - copyFile(mInputUri, mOutputUri); - } - } else if("dataability".equals(inputUriScheme)){ - if(mInputUri != null && mOutputUri != null) { - copyFile(mInputUri, mOutputUri); - } - } else if (!"file".equals(inputUriScheme)) { - LogUtils.LogError(TAG, "Invalid Uri scheme " + inputUriScheme); - throw new IllegalArgumentException("Invalid Uri scheme" + inputUriScheme); } } @@ -229,9 +227,6 @@ public class BitmapLoadTask { FileDescriptor fd_o = helper.openFile(outputUri, "w"); if (fd_o != null) { outputStream = new FileOutputStream(fd_o); - if (inputStream == null) { - return; - } byte[] buffer = new byte[1024]; int length; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java index 1be3611101fcdad0b2d9e30af4f0a547c5996804..10d0bd03aa15d6ea68de120e59e7b66d664cc440 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/BitmapLoadUtils.java @@ -43,6 +43,15 @@ public class BitmapLoadUtils { new BitmapLoadTask(context, uri, outputUri, requiredWidth, requiredHeight, loadCallback).doInBackground(); } + /** + * transformBitmap + * + * @param bitmap bitmap + * @param degrees degrees + * @param scale_X scale_X + * @param context context + * @return transformBitmap + */ public PixelMap transformBitmap(PixelMap bitmap, float degrees, float scale_X, Context context) { try { //逻辑:对位图使用矩阵进行先旋转再缩放、平移 @@ -83,6 +92,15 @@ public class BitmapLoadUtils { imagePacker.finalizePacking(); } + /** + * _loadImage + * + * @param context context + * @param file file + * @param size size + * @param degrees degrees + * @return _loadImage + */ public PixelMap _loadImage(Context context, File file, Size size, float degrees) { System.out.println(context); if (file == null) { diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/CubicEasing.java b/ucrop/src/main/java/com/yalantis/ucrop/util/CubicEasing.java index d2bd296148421d122a018a33da3bd58daf90eb7d..baaf3f70448c2a822effcb33fcdcadcb2f49c2f7 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/CubicEasing.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/CubicEasing.java @@ -3,11 +3,12 @@ package com.yalantis.ucrop.util; public final class CubicEasing { public static float easeOut(float time, float start, float end, float duration) { - return end * ((time = time / duration - 1.0f) * time * time + 1.0f) + start; + return NumCalcUtil.add(NumCalcUtil.multiply(end , (NumCalcUtil.multiply((time = NumCalcUtil.subtract(time / duration , 1.0f)) + , NumCalcUtil.add(time * time , 1.0f)))) , start); } public static float easeInOut(float time, float start, float end, float duration) { - return (time /= duration / 2.0f) < 1.0f ? end / 2.0f * time * time * time + start : end / 2.0f * ((time -= 2.0f) * time * time + 2.0f) + start; + return NumCalcUtil.add((time /= duration / 2.0f) < 1.0f ? end / 2.0f * time * time * time + start : end / 2.0f * ((time -= 2.0f) * time * time + 2.0f) , start); } } diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/NumCalcUtil.java b/ucrop/src/main/java/com/yalantis/ucrop/util/NumCalcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c361c0481925fcc83edb3b6eeadc3e5187619bfa --- /dev/null +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/NumCalcUtil.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain an copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.yalantis.ucrop.util; + +import java.math.BigDecimal; + +/** + * 浮点数计算工具类 + * + * @since 2021-05-17 + */ +public class NumCalcUtil { + private NumCalcUtil() { + } + /** + * 加法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float add(float num1, float num2) { + return new BigDecimal(num1).add(new BigDecimal(num2)).floatValue(); + } + + /** + * 减法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float subtract(float num1, float num2) { + return new BigDecimal(num1).subtract(new BigDecimal(num2)).floatValue(); + } + + /** + * 除法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float divide(float num1, float num2) { + return new BigDecimal(num1).divide(new BigDecimal(num2)).floatValue(); + } + + /** + * 乘法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float multiply(float num1, float num2) { + return new BigDecimal(num1).multiply(new BigDecimal(num2)).floatValue(); + } +} diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/RectUtils.java b/ucrop/src/main/java/com/yalantis/ucrop/util/RectUtils.java index edc9ca43e050427c94937da0d1a96dc703b16b5e..e14d42c03ce1ae4e2b5dac8d2a7363c30c533f08 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/RectUtils.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/RectUtils.java @@ -39,12 +39,14 @@ public class RectUtils { * @return the float array of width and height (2 floats) */ public static float[] getRectSidesFromCorners(float[] corners) { - return new float[]{(float) Math.sqrt(Math.pow(corners[0] - corners[2], 2) + Math.pow(corners[1] - corners[3], 2)), - (float) Math.sqrt(Math.pow(corners[2] - corners[4], 2) + Math.pow(corners[3] - corners[5], 2))}; + return new float[]{(float) Math.sqrt(Math.pow(NumCalcUtil.subtract(corners[0] , corners[2]), 2) + + Math.pow(NumCalcUtil.subtract(corners[1] , corners[3]), 2)), + (float) Math.sqrt(Math.pow(NumCalcUtil.subtract(corners[2] , corners[4]), 2) + + Math.pow(NumCalcUtil.subtract(corners[3] , corners[5]), 2))}; } public static float[] getCenterFromRect(RectFloat r) { - return new float[]{(r.left + r.right) /2, (r.top + r.bottom) /2}; + return new float[]{(NumCalcUtil.add(r.left , r.right)) /2, (NumCalcUtil.add(r.top , r.bottom)) /2}; } /** diff --git a/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java b/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java index 8638096fcf9fa9b694ea13e9defc634ff16a78e6..d77cb9e88f0bb0fc5b181e4945b690218246ea23 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/util/RotationGestureDetector.java @@ -77,17 +77,19 @@ public class RotationGestureDetector { private void calculateAngleBetweenLines(float fx1, float fy1, float fx2, float fy2, float sx1, float sy1, float sx2, float sy2) { calculateAngleDelta( - (float) Math.toDegrees((float) Math.atan2((fy1 - fy2), (fx1 - fx2))), - (float) Math.toDegrees((float) Math.atan2((sy1 - sy2), (sx1 - sx2)))); + (float) Math.toDegrees((float) Math.atan2((NumCalcUtil.subtract(fy1 , fy2)) + , (NumCalcUtil.subtract(fx1 , fx2)))), + (float) Math.toDegrees((float) Math.atan2((NumCalcUtil.subtract(sy1 , sy2)) + , (NumCalcUtil.subtract(sx1 , sx2))))); } private void calculateAngleDelta(float angleFrom, float angleTo) { - mAngle = angleTo % 360.0f - angleFrom % 360.0f; + mAngle = NumCalcUtil.subtract(angleTo % 360.0f , angleFrom % 360.0f); if (mAngle < -180.0f) { - mAngle += 360.0f; + mAngle = NumCalcUtil.add(mAngle , 360.0f); } else if (mAngle > 180.0f) { - mAngle -= 360.0f; + mAngle = NumCalcUtil.subtract(mAngle , 360.0f); } } diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java index c3ef2e4ae6be0ae183d85d470093b6f64b6bf4b2..e4fd24dce707fafddb5ac4bac9b2b6bce1bc5980 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/CropImageView.java @@ -10,6 +10,7 @@ import com.yalantis.ucrop.task.BitmapCropTask; import com.yalantis.ucrop.util.Config; import com.yalantis.ucrop.util.CubicEasing; import com.yalantis.ucrop.util.LogUtils; +import com.yalantis.ucrop.util.NumCalcUtil; import com.yalantis.ucrop.util.RectUtils; import java.lang.ref.WeakReference; @@ -170,8 +171,8 @@ public class CropImageView extends TransformImageView { float currentY = mCurrentImageCenter[1]; float currentScale = getCurrentScale(); //裁剪框的中心点坐标减去图像的中心点坐标 - float deltaX = mCropRect.getCenter().position[0] - currentX; - float deltaY = mCropRect.getCenter().position[1] - currentY; + float deltaX = NumCalcUtil.subtract(mCropRect.getCenter().position[0] , currentX); + float deltaY = NumCalcUtil.subtract(mCropRect.getCenter().position[1] , currentY); float deltaScale = 0; mTempMatrix.reset(); @@ -184,8 +185,8 @@ public class CropImageView extends TransformImageView { if (willImageWrapCropBoundsAfterTranslate) { final float[] imageIndents = calculateImageIndents(); - deltaX = -(imageIndents[0] + imageIndents[2]); - deltaY = -(imageIndents[1] + imageIndents[3]); + deltaX = -(NumCalcUtil.add(imageIndents[0] , imageIndents[2])); + deltaY = -(NumCalcUtil.add(imageIndents[1] , imageIndents[3])); } else { RectFloat tempCropRect = new RectFloat(mCropRect); mTempMatrix.reset(); @@ -196,7 +197,7 @@ public class CropImageView extends TransformImageView { deltaScale = Math.max(tempCropRect.getWidth() / currentImageSides[0], tempCropRect.getHeight() / currentImageSides[1]); - deltaScale = deltaScale * currentScale - currentScale; + deltaScale = NumCalcUtil.subtract(deltaScale * currentScale , currentScale); } if (animate) { @@ -234,14 +235,14 @@ public class CropImageView extends TransformImageView { RectFloat unrotatedImageRect = RectUtils.trapToRect(unrotatedImageCorners); RectFloat unrotatedCropRect = RectUtils.trapToRect(unrotatedCropBoundsCorners); - float deltaLeft = unrotatedImageRect.left - unrotatedCropRect.left; - float deltaTop = unrotatedImageRect.top - unrotatedCropRect.top; - float deltaRight = unrotatedImageRect.right - unrotatedCropRect.right; - float deltaBottom = unrotatedImageRect.bottom - unrotatedCropRect.bottom; + float deltaLeft = NumCalcUtil.subtract(unrotatedImageRect.left , unrotatedCropRect.left); + float deltaTop = NumCalcUtil.subtract(unrotatedImageRect.top , unrotatedCropRect.top); + float deltaRight = NumCalcUtil.subtract(unrotatedImageRect.right , unrotatedCropRect.right); + float deltaBottom = NumCalcUtil.subtract(unrotatedImageRect.bottom , unrotatedCropRect.bottom); float[] indents = new float[4]; - indents[0] = (deltaLeft > 0) ? deltaLeft : 0; - indents[1] = (deltaTop > 0) ? deltaTop : 0; + indents[0] = (deltaLeft < 0) ? deltaLeft : 0; + indents[1] = (deltaTop < 0) ? deltaTop : 0; indents[2] = (deltaRight < 0) ? deltaRight : 0; indents[3] = (deltaBottom < 0) ? deltaBottom : 0; @@ -339,9 +340,10 @@ public class CropImageView extends TransformImageView { * @param drawableHeight - image height */ private void calculateImageScaleBounds(float drawableWidth, float drawableHeight) { +// float widthScale = Math.min(NumCalcUtil.divide(mCropRect.getWidth() , drawableWidth), NumCalcUtil.divide(mCropRect.getWidth() , drawableHeight)); +// float heightScale = Math.min(NumCalcUtil.divide(mCropRect.getHeight() , drawableHeight), NumCalcUtil.divide(mCropRect.getHeight() , drawableWidth)); float widthScale = Math.min(mCropRect.getWidth() / drawableWidth, mCropRect.getWidth() / drawableHeight); float heightScale = Math.min(mCropRect.getHeight() / drawableHeight, mCropRect.getHeight() / drawableWidth); - float mMinScale = Math.min(widthScale, heightScale); mMaxScale = mMinScale * DEFAULT_MAX_SCALE_MULTIPLIER; } @@ -362,8 +364,10 @@ public class CropImageView extends TransformImageView { float initialMinScale = Math.max(widthScale, heightScale); - float tw = (cropRectWidth - drawableWidth * initialMinScale) / 2.0f + mCropRect.left; - float th = (cropRectHeight - drawableHeight * initialMinScale) / 2.0f + mCropRect.top; + float tw = NumCalcUtil.add((NumCalcUtil.subtract(cropRectWidth , drawableWidth * initialMinScale)) / 2.0f + , mCropRect.left); + float th = NumCalcUtil.add((NumCalcUtil.subtract(cropRectHeight , drawableHeight * initialMinScale)) / 2.0f + , mCropRect.top); mCurrentImageMatrix.reset(); mCurrentImageMatrix.postScale(initialMinScale, initialMinScale); @@ -441,9 +445,14 @@ public class CropImageView extends TransformImageView { float newScale = CubicEasing.easeInOut(currentMs, 0, mDeltaScale, mDurationMs); if (currentMs < mDurationMs) { - cropImageView.postTranslate(newX - (cropImageView.mCurrentImageCenter[0] - mOldX), newY - (cropImageView.mCurrentImageCenter[1] - mOldY)); + cropImageView.postTranslate(NumCalcUtil.subtract(newX + , (NumCalcUtil.subtract(cropImageView.mCurrentImageCenter[0] , mOldX))) + , NumCalcUtil.subtract(newY + , (NumCalcUtil.subtract(cropImageView.mCurrentImageCenter[1] , mOldY)))); if (!mWillBeImageInBoundsAfterTranslate) { - cropImageView.zoomInImage(mOldScale + newScale, cropImageView.mCropRect.getCenter().position[0], cropImageView.mCropRect.getCenter().position[1]); + cropImageView.zoomInImage(NumCalcUtil.add(mOldScale , newScale) + , cropImageView.mCropRect.getCenter().position[0] + , cropImageView.mCropRect.getCenter().position[1]); } if (!cropImageView.isImageWrapCropBounds()) { cropImageView.eventHandler.postTask(this); diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/GestureCropImageView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/GestureCropImageView.java index 47ea4d00766164bc4460754528f5d2dd616176cd..e70bb308651dd330eca9b248fb949f8cd458bdab 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/GestureCropImageView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/GestureCropImageView.java @@ -2,6 +2,7 @@ package com.yalantis.ucrop.view; import com.yalantis.ucrop.util.LogUtils; +import com.yalantis.ucrop.util.NumCalcUtil; import com.yalantis.ucrop.util.RotationGestureDetector; import ohos.agp.components.AttrSet; import ohos.agp.components.Component; @@ -50,16 +51,16 @@ public class GestureCropImageView extends CropImageView implements Component.Tou LogUtils.LogInfo("qqqqqqq:","Pointer Counter:"+event.getPointerCount()); if (event.getPointerCount() > 1) { //获取缩放中点 - mMidPntX = (event.getPointerPosition(0).getX() + event.getPointerPosition(1).getX()) / 2; - mMidPntY = (event.getPointerPosition(0).getY() + event.getPointerPosition(1).getY()) / 2; + mMidPntX = (NumCalcUtil.add(event.getPointerPosition(0).getX() , event.getPointerPosition(1).getX()) / 2); + mMidPntY = (NumCalcUtil.add(event.getPointerPosition(0).getY() , event.getPointerPosition(1).getY()) / 2); } if(event.getPointerCount() == 1){ //滑动 float now_X = event.getPointerPosition(0).getX(); float now_Y = event.getPointerPosition(0).getY(); if(before_X > 0 && before_Y >0){ - float scroll_X = now_X - before_X; - float scroll_Y = now_Y - before_Y; + float scroll_X = NumCalcUtil.subtract(now_X , before_X); + float scroll_Y = NumCalcUtil.subtract(now_Y , before_Y); postTranslate(scroll_X,scroll_Y); } before_X = now_X; diff --git a/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java b/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java index 3a7d0c0478e0ae5c31e292d9819e9ff0a596af10..7870e6423102950f3a787e26c22235b3e386a43a 100644 --- a/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java +++ b/ucrop/src/main/java/com/yalantis/ucrop/view/OverlayView.java @@ -3,6 +3,7 @@ package com.yalantis.ucrop.view; import com.yalantis.ucrop.callback.OverlayViewChangeListener; import com.yalantis.ucrop.util.Config; import com.yalantis.ucrop.util.LogUtils; +import com.yalantis.ucrop.util.NumCalcUtil; import com.yalantis.ucrop.util.RectUtils; import ohos.agp.components.AttrSet; @@ -249,7 +250,8 @@ public class OverlayView extends Component implements Component.DrawTask, Compon break; // move rectangle case 4: - mTempRect.translate(touchX - mPreviousTouchX, touchY - mPreviousTouchY); + mTempRect.translate(NumCalcUtil.subtract(touchX , mPreviousTouchX) + , NumCalcUtil.subtract(touchY , mPreviousTouchY)); if (mTempRect.left > getLeft() && mTempRect.top > getTop() && mTempRect.right < getRight() && mTempRect.bottom < getBottom()) { mCropViewRect.modify(mTempRect); @@ -288,8 +290,8 @@ public class OverlayView extends Component implements Component.DrawTask, Compon int closestPointIndex = -1; double closestPointDistance = mTouchPointThreshold; for (int i = 0; i < 8; i += 2) { - double distanceToCorner = Math.sqrt(Math.pow(touchX - mCropGridCorners[i], 2) - + Math.pow(touchY - mCropGridCorners[i + 1], 2)); + double distanceToCorner = Math.sqrt(Math.pow(NumCalcUtil.subtract(touchX , mCropGridCorners[i]), 2) + + Math.pow(NumCalcUtil.subtract(touchY , mCropGridCorners[i + 1]), 2)); if (distanceToCorner < closestPointDistance) { closestPointDistance = distanceToCorner; closestPointIndex = i / 2; @@ -333,7 +335,8 @@ public class OverlayView extends Component implements Component.DrawTask, Compon canvas.restore(); if (mCircleDimmedLayer) { // Draw 1px stroke to fix antialias - canvas.drawCircle(mCropViewRect.left+mCropViewRect.getWidth()*2, mCropViewRect.right+mCropViewRect.getHeight()*2, + canvas.drawCircle(NumCalcUtil.add(mCropViewRect.left,mCropViewRect.getWidth()*2) + , NumCalcUtil.add(mCropViewRect.right,mCropViewRect.getHeight()*2), Math.min(mCropViewRect.getWidth(), mCropViewRect.getHeight()) / 2.f, mDimmedStrokePaint); } } @@ -349,7 +352,6 @@ public class OverlayView extends Component implements Component.DrawTask, Compon if (mGridPoints == null && !mCropViewRect.isEmpty()) { mGridPoints = new float[(mCropGridRowCount) * 4 + (mCropGridColumnCount) * 4]; - int index = 0; for (int i = 0; i < mCropGridRowCount; i++) { mGridPoints[index++] = mCropViewRect.left; @@ -364,7 +366,6 @@ public class OverlayView extends Component implements Component.DrawTask, Compon mGridPoints[index++] = (mCropViewRect.getWidth() * (((float) i + 1.0f) / (float) (mCropGridColumnCount + 1))) + mCropViewRect.left; mGridPoints[index++] = mCropViewRect.bottom; } - canvas.drawLines(mGridPoints, mCropGridPaint); } }