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);
}
}