From d1c83c40c2e8dc23c6edbf0a81fa9fa60d945749 Mon Sep 17 00:00:00 2001 From: ZYF949 <446962864@qq.com> Date: Mon, 7 Jun 2021 10:37:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0gitee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 ++ .idea/checkstyle-idea.xml | 16 +++++++++ .idea/compiler.xml | 6 ++++ .idea/gradle.xml | 23 ++++++++++++ .idea/jarRepositories.xml | 40 +++++++++++++++++++++ .idea/markdown-navigator-enh.xml | 10 ++++++ .idea/markdown-navigator.xml | 62 ++++++++++++++++++++++++++++++++ .idea/misc.xml | 4 +++ .idea/vcs.xml | 6 ++++ CHANGELOG.md | 3 +- README.md | 2 +- 11 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/checkstyle-idea.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/markdown-navigator-enh.xml create mode 100644 .idea/markdown-navigator.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..9d45f43 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..61a9130 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..6bc7060 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..cb71b32 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator-enh.xml b/.idea/markdown-navigator-enh.xml new file mode 100644 index 0000000..a8fcc84 --- /dev/null +++ b/.idea/markdown-navigator-enh.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml new file mode 100644 index 0000000..a2fc086 --- /dev/null +++ b/.idea/markdown-navigator.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..58918f5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 492e3b2..644c92e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,4 +3,5 @@ ohos第一个版本 * 实现了原库大部分api -* 因为缺少对应api,当前仅支持播放wav音频时背景联动,若播放mp3则背景不联动 \ No newline at end of file +* 因为缺少对应api,当前仅支持播放wav音频时背景联动,若播放mp3则背景不联动 +* CIRCLEINE黑色边角设置对应颜色无效果,暂未实现 \ No newline at end of file diff --git a/README.md b/README.md index 435aa82..8630e66 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ * 功能:音频播放及背景联动 * 项目移植状态:当前仅支持播放wav格式音频,若想播放mp3音频,背景无法联动 * 调用差异:无 -* 开发版本:sdk5,DevEco Studio2.1 beta4 +* 开发版本:sdk5,DevEco Studio 2.1 Release * 基线版本:Relesase版本号0.9.1 #### 效果演示 -- Gitee From 83ccdb5dc33b86ab5171876a346d753bb28f5260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B8=86?= <446962864@qq.com> Date: Mon, 7 Jun 2021 10:37:41 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20.ide?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 -- .idea/checkstyle-idea.xml | 16 --------- .idea/compiler.xml | 6 ---- .idea/gradle.xml | 23 ------------ .idea/jarRepositories.xml | 40 --------------------- .idea/markdown-navigator-enh.xml | 10 ------ .idea/markdown-navigator.xml | 62 -------------------------------- .idea/misc.xml | 4 --- .idea/vcs.xml | 6 ---- 9 files changed, 170 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/checkstyle-idea.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/markdown-navigator-enh.xml delete mode 100644 .idea/markdown-navigator.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml deleted file mode 100644 index 9d45f43..0000000 --- a/.idea/checkstyle-idea.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 61a9130..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 6bc7060..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index cb71b32..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/markdown-navigator-enh.xml b/.idea/markdown-navigator-enh.xml deleted file mode 100644 index a8fcc84..0000000 --- a/.idea/markdown-navigator-enh.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml deleted file mode 100644 index a2fc086..0000000 --- a/.idea/markdown-navigator.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 58918f5..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file -- Gitee From 052186be20c4c82a39c54c6992f102cf964c3ce1 Mon Sep 17 00:00:00 2001 From: ZYF949 <446962864@qq.com> Date: Mon, 7 Jun 2021 16:26:32 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0gitee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../visualizer/BarVisualizer.java | 94 ++++++++++--------- 1 file changed, 51 insertions(+), 43 deletions(-) diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java index 6703126..112d62c 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java @@ -110,23 +110,7 @@ public class BarVisualizer extends BaseVisualizer implements Component.DrawTask @Override public void onDraw(Component component, Canvas canvas) { - if (mBarWidth == -1) { - canvas.getLocalClipBounds(mClipBounds); - mBarWidth = component.getWidth() / nPoints; - - // initialize points - for (int i = 0; i < mSrcY.length; i++) { - float posY; - if (mPositionGravity == PositionGravity.TOP) { - posY = mClipBounds.top; - } else { - posY = mClipBounds.bottom; - } - - mSrcY[i] = posY; - mDestY[i] = posY; - } - } + onDrawInit(component, canvas); // create the path and draw if (isVisualizationEnabled && mRawAudioBytes != null) { @@ -134,32 +118,7 @@ public class BarVisualizer extends BaseVisualizer implements Component.DrawTask return; } - // find the destination bezier point for a batch - if (nBatchCount == 0) { - float randPosY = mDestY[mRandom.nextInt(nPoints)]; - for (int i = 0; i < mSrcY.length; i++) { - - int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); - int t = 0; - if (x < 1024) { - t = component.getHeight() - + ((byte) (Math.abs(mRawAudioBytes[x]) + 128)) * component.getHeight() / 128; - } - - float posY; - if (mPositionGravity == PositionGravity.TOP) { - posY = mClipBounds.bottom - t; - } else { - posY = mClipBounds.top + t; - } - - // change the source and destination y - mSrcY[i] = mDestY[i]; - mDestY[i] = posY; - } - - mDestY[mSrcY.length - 1] = randPosY; - } + onDrawValuation(component); // increment batch count nBatchCount++; @@ -179,4 +138,53 @@ public class BarVisualizer extends BaseVisualizer implements Component.DrawTask super.addDrawTask(this::onDraw); } + + private void onDrawValuation(Component component) { + // find the destination bezier point for a batch + if (nBatchCount == 0) { + float randPosY = mDestY[mRandom.nextInt(nPoints)]; + for (int i = 0; i < mSrcY.length; i++) { + + int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); + int t = 0; + if (x < 1024) { + t = component.getHeight() + + ((byte) (Math.abs(mRawAudioBytes[x]) + 128)) * component.getHeight() / 128; + } + + float posY; + if (mPositionGravity == PositionGravity.TOP) { + posY = mClipBounds.bottom - t; + } else { + posY = mClipBounds.top + t; + } + + // change the source and destination y + mSrcY[i] = mDestY[i]; + mDestY[i] = posY; + } + + mDestY[mSrcY.length - 1] = randPosY; + } + } + + private void onDrawInit(Component component, Canvas canvas) { + if (mBarWidth == -1) { + canvas.getLocalClipBounds(mClipBounds); + mBarWidth = component.getWidth() / nPoints; + + // initialize points + for (int i = 0; i < mSrcY.length; i++) { + float posY; + if (mPositionGravity == PositionGravity.TOP) { + posY = mClipBounds.top; + } else { + posY = mClipBounds.bottom; + } + + mSrcY[i] = posY; + mDestY[i] = posY; + } + } + } } \ No newline at end of file -- Gitee From 967e814a87dbd271c573eaa7dd24c5105dbac7db Mon Sep 17 00:00:00 2001 From: ZYF949 <446962864@qq.com> Date: Mon, 7 Jun 2021 16:57:11 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0gitee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- audiovisualizer/src/main/config.json | 2 +- .../audiovisualizer/base/BaseVisualizer.java | 14 +- .../visualizer/BarVisualizer.java | 2 - .../visualizer/BlastVisualizer.java | 6 +- .../visualizer/BlobVisualizer.java | 149 +++++++++-------- .../visualizer/HiFiVisualizer.java | 38 ++--- .../visualizer/WaveVisualizer.java | 154 ++++++++++-------- .../slice/MainAbilitySlice.java | 4 +- .../ui/MusicStreamAbility.java | 7 +- .../util/PermissionUtils.java | 2 +- .../util/PlaySoundUtil.java | 3 +- .../github/gabrielbb/cutout/ExampleTest.java | 2 +- 12 files changed, 205 insertions(+), 178 deletions(-) diff --git a/audiovisualizer/src/main/config.json b/audiovisualizer/src/main/config.json index 86c25f7..c4a0187 100644 --- a/audiovisualizer/src/main/config.json +++ b/audiovisualizer/src/main/config.json @@ -3,7 +3,7 @@ "bundleName": "com.gauravk.audiovisualizersample", "vendor": "gauravk", "version": { - "code": 1, + "code": 1000000, "name": "1.0" }, "apiVersion": { diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java index a0ae6e7..11aeb71 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java @@ -23,12 +23,12 @@ import com.gauravk.audiovisualizer.utils.AVConstants; import ohos.agp.components.AttrSet; import ohos.agp.components.ComponentContainer; -import ohos.agp.components.ListContainer; import ohos.agp.render.Paint; import ohos.agp.utils.Color; import ohos.app.Context; import ohos.media.audio.AudioWaver; + /** * Base class for the visualizers *

@@ -50,7 +50,7 @@ public abstract class BaseVisualizer extends ComponentContainer { protected AnimSpeed mAnimSpeed = AnimSpeed.MEDIUM; protected boolean isVisualizationEnabled = true; - private AudioWaver audioWaver; + private AudioWaver mAudioWaver; /** * 使用java代码实例化调用 @@ -189,10 +189,10 @@ public abstract class BaseVisualizer extends ComponentContainer { * @param audioSessionId of the media to be visualised */ public void setAudioSessionId(int audioSessionId) { - audioWaver = new AudioWaver(audioSessionId, this.getClass().getName()); - audioWaver.setActivated(false); - audioWaver.setDataSize(AudioWaver.getMaxDataSize()); - audioWaver.setWaveDataObserver(new AudioWaver.WaveDataObserver() { + mAudioWaver = new AudioWaver(audioSessionId, this.getClass().getName()); + mAudioWaver.setActivated(false); + mAudioWaver.setDataSize(AudioWaver.getMaxDataSize()); + mAudioWaver.setWaveDataObserver(new AudioWaver.WaveDataObserver() { @Override public void onWaveData(byte[] mBytes, int i) { BaseVisualizer.this.mRawAudioBytes = mBytes; @@ -205,6 +205,6 @@ public abstract class BaseVisualizer extends ComponentContainer { }); } }, AudioWaver.getMinInterval()); - audioWaver.setActivated(true); + mAudioWaver.setActivated(true); } } \ No newline at end of file diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java index 112d62c..f5ed203 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BarVisualizer.java @@ -28,7 +28,6 @@ import ohos.agp.utils.Rect; import ohos.app.Context; import java.security.SecureRandom; -import java.util.Random; /** * Custom view to create bar visualizer @@ -135,7 +134,6 @@ public class BarVisualizer extends BaseVisualizer implements Component.DrawTask nBatchCount = 0; } } - super.addDrawTask(this::onDraw); } diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java index ce844f9..eafa65a 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java @@ -79,6 +79,11 @@ public class BlastVisualizer extends BaseVisualizer implements Component.DrawTas mRadius = (int) (mRadius * 0.65 / 2); } + onDrawInit(component, canvas); + + } + + private void onDrawInit(Component component, Canvas canvas) { // create the path and draw if (isVisualizationEnabled && mRawAudioBytes != null) { if (mRawAudioBytes.length == 0) { @@ -113,6 +118,5 @@ public class BlastVisualizer extends BaseVisualizer implements Component.DrawTas mSpikePath.close(); canvas.drawPath(mSpikePath, mPaint); } - } } \ No newline at end of file diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java index dc7c77d..f74b226 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java @@ -49,7 +49,6 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask private boolean isFirstPlay = true; private float mAngleOffset; private float mChangeFactor; - private AudioManager audioManager; /** * 使用java代码实例化调用 @@ -84,7 +83,6 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask @Override protected void init() { addDrawTask(this::onDraw); - audioManager = new AudioManager(getContext()); mRadius = -1; nPoints = (int) (mDensity * BLOB_MAX_POINTS); if (nPoints < BLOB_MIN_POINTS) { @@ -130,29 +128,7 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask @Override public void onDraw(Component component, Canvas canvas) { double angle = 0; - // first time initialization - if (mRadius == -1) { - mRadius = getHeight() < getWidth() ? getHeight() : getWidth(); - - // 382 - mRadius = (int) (mRadius * 0.65 / 2); - - // 10.8 - mChangeFactor = getHeight() * mChangeFactor; - - // initialize bezier points - for (int i = 0; i < nPoints; i++, angle += mAngleOffset) { - float posX = (float) (getWidth() / 2 - + (mRadius) - * Math.cos(Math.toRadians(angle))); - - float posY = (float) (getHeight() / 2 - + (mRadius) - * Math.sin(Math.toRadians(angle))); - - mBezierPoints[i].modify(posX, posY); - } - } + angle = onDrawInit(angle); // create the path and draw if (isVisualizationEnabled && mRawAudioBytes != null) { @@ -163,62 +139,97 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask mBlobPath.rewind(); // find the destination bezier point for a batch - for (int i = 0; i < nPoints; i++, angle += mAngleOffset) { + onDrawValuation(component, angle); - // 1=1 X=34 i=2 X=68 - int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); - int t = 0; - if (x < 1024) { - t = ((byte) (-Math.abs(mRawAudioBytes[x]) + 128)) * (component.getHeight() / 4) / 128; - } + onDrawModification(); - float posX = (float) (getWidth() / 2 - + (mRadius + t) - * Math.cos(Math.toRadians(angle))); + // add an extra line to center cover the gap generated by last cubicTo + if (mPaintStyle == PaintStyle.FILL) { + mBlobPath.lineTo(getWidth() / 2, getHeight() / 2); + } + canvas.drawPath(mBlobPath, mPaint); + } + super.addDrawTask(this::onDraw); + } - float posY = (float) (getHeight() / 2 - + (mRadius + t) - * Math.sin(Math.toRadians(angle))); + private void onDrawModification() { + // set the first and last point as first - // calculate the new x based on change - if (posX - mBezierPoints[i].getPointX() > 0) { - mBezierPoints[i].modify(mBezierPoints[i].getPointX() + mChangeFactor, mBezierPoints[i].getPointY()); - } else { - mBezierPoints[i].modify(mBezierPoints[i].getPointX() - mChangeFactor, mBezierPoints[i].getPointY()); - } - - // calculate the new y based on change - if (posY - mBezierPoints[i].getPointY() > 0) { - mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() + mChangeFactor); - } else { - mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() - mChangeFactor); - } + mBezierPoints[nPoints].modify(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); + mBezierPoints[nPoints + 1].modify(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); + + // update the control points + mBezierSpline.updateCurveControlPoints(mBezierPoints); + Point[] firstCP = mBezierSpline.getFirstControlPoints(); + Point[] secondCP = mBezierSpline.getSecondControlPoints(); + + // create the path + mBlobPath.moveTo(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); + for (int i = 0; i < firstCP.length; i++) { + mBlobPath.cubicTo(firstCP[i].getPointX(), firstCP[i].getPointY(), + secondCP[i].getPointX(), secondCP[i].getPointY(), + mBezierPoints[i + 1].getPointX(), mBezierPoints[i + 1].getPointY()); + } + } + + private void onDrawValuation(Component component, double angle) { + for (int i = 0; i < nPoints; i++, angle += mAngleOffset) { + + // 1=1 X=34 i=2 X=68 + int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); + int t = 0; + if (x < 1024) { + t = ((byte) (-Math.abs(mRawAudioBytes[x]) + 128)) * (component.getHeight() / 4) / 128; } - // set the first and last point as first + float posX = (float) (getWidth() / 2 + + (mRadius + t) + * Math.cos(Math.toRadians(angle))); - mBezierPoints[nPoints].modify(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); - mBezierPoints[nPoints + 1].modify(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); + float posY = (float) (getHeight() / 2 + + (mRadius + t) + * Math.sin(Math.toRadians(angle))); - // update the control points - mBezierSpline.updateCurveControlPoints(mBezierPoints); - Point[] firstCP = mBezierSpline.getFirstControlPoints(); - Point[] secondCP = mBezierSpline.getSecondControlPoints(); + // calculate the new x based on change + if (posX - mBezierPoints[i].getPointX() > 0) { + mBezierPoints[i].modify(mBezierPoints[i].getPointX() + mChangeFactor, mBezierPoints[i].getPointY()); + } else { + mBezierPoints[i].modify(mBezierPoints[i].getPointX() - mChangeFactor, mBezierPoints[i].getPointY()); + } - // create the path - mBlobPath.moveTo(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); - for (int i = 0; i < firstCP.length; i++) { - mBlobPath.cubicTo(firstCP[i].getPointX(), firstCP[i].getPointY(), - secondCP[i].getPointX(), secondCP[i].getPointY(), - mBezierPoints[i + 1].getPointX(), mBezierPoints[i + 1].getPointY()); + // calculate the new y based on change + if (posY - mBezierPoints[i].getPointY() > 0) { + mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() + mChangeFactor); + } else { + mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() - mChangeFactor); } + } + } - // add an extra line to center cover the gap generated by last cubicTo - if (mPaintStyle == PaintStyle.FILL) { - mBlobPath.lineTo(getWidth() / 2, getHeight() / 2); + private double onDrawInit(double angle) { + // first time initialization + if (mRadius == -1) { + mRadius = getHeight() < getWidth() ? getHeight() : getWidth(); + + // 382 + mRadius = (int) (mRadius * 0.65 / 2); + + // 10.8 + mChangeFactor = getHeight() * mChangeFactor; + + // initialize bezier points + for (int i = 0; i < nPoints; i++, angle += mAngleOffset) { + float posX = (float) (getWidth() / 2 + + (mRadius) + * Math.cos(Math.toRadians(angle))); + + float posY = (float) (getHeight() / 2 + + (mRadius) + * Math.sin(Math.toRadians(angle))); + + mBezierPoints[i].modify(posX, posY); } - canvas.drawPath(mBlobPath, mPaint); } - super.addDrawTask(this::onDraw); + return angle; } } \ No newline at end of file diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/HiFiVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/HiFiVisualizer.java index 6406bbf..1a872a5 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/HiFiVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/HiFiVisualizer.java @@ -3,8 +3,6 @@ package com.gauravk.audiovisualizer.visualizer; import com.gauravk.audiovisualizer.base.BaseVisualizer; import com.gauravk.audiovisualizer.model.PaintStyle; -import ohos.agp.colors.ColorSpec; -import ohos.agp.colors.RgbColor; import ohos.agp.components.AttrSet; import ohos.agp.components.Component; import ohos.agp.render.Canvas; @@ -28,7 +26,7 @@ public class HiFiVisualizer extends BaseVisualizer implements Component.DrawTask private int mRadius; private int mPoints; private int[] mHeights; - private Paint paint; + private Paint mPaint; // outward path private Path mPath; @@ -75,14 +73,14 @@ public class HiFiVisualizer extends BaseVisualizer implements Component.DrawTask } mHeights = new int[mPoints]; - paint = new Paint(); - paint.setColor(new Color(Color.getIntColor("#FCB8A3"))); - paint.setStrokeWidth(mStrokeWidth); + mPaint = new Paint(); + mPaint.setColor(new Color(Color.getIntColor("#FCB8A3"))); + mPaint.setStrokeWidth(mStrokeWidth); if (mPaintStyle == PaintStyle.FILL) { - paint.setStyle(Paint.Style.FILL_STYLE); + mPaint.setStyle(Paint.Style.FILL_STYLE); } else { - paint.setStyle(Paint.Style.STROKE_STYLE); + mPaint.setStyle(Paint.Style.STROKE_STYLE); } } @@ -97,13 +95,13 @@ public class HiFiVisualizer extends BaseVisualizer implements Component.DrawTask mPath1.reset(); // start the outward path from the last point - float cxL = (float) (getWidth() / 2 + Math.cos((360 - 360 / mPoints) * Math.PI / 180) * (mRadius + mHeights[mPoints - 1])); - float cyL = (float) (getHeight() / 2 - Math.sin((360 - 360 / mPoints) * Math.PI / 180) * (mRadius + mHeights[mPoints - 1])); + float cxL = (float) (getWidth() / 2 + Math.cos((360 - (double)(360 / mPoints)) * Math.PI / 180) * (mRadius + mHeights[mPoints - 1])); + float cyL = (float) (getHeight() / 2 - Math.sin((360 - (double)(360 / mPoints)) * Math.PI / 180) * (mRadius + mHeights[mPoints - 1])); mPath.moveTo(cxL, cyL); // start the inward path from the last point - float cxL1 = (float) (getWidth() / 2 + Math.cos((360 - 360 / mPoints) * Math.PI / 180) * (mRadius - mHeights[mPoints - 1])); - float cyL1 = (float) (getHeight() / 2 - Math.sin((360 - 360 / mPoints) * Math.PI / 180) * (mRadius - mHeights[mPoints - 1])); + float cxL1 = (float) (getWidth() / 2 + Math.cos((360 - (double)(360 / mPoints)) * Math.PI / 180) * (mRadius - mHeights[mPoints - 1])); + float cyL1 = (float) (getHeight() / 2 - Math.sin((360 - (double)(360 / mPoints)) * Math.PI / 180) * (mRadius - mHeights[mPoints - 1])); mPath1.moveTo(cxL1, cyL1); for (int i = 0; i < 360; i = i + 360 / mPoints) { // outward @@ -112,22 +110,22 @@ public class HiFiVisualizer extends BaseVisualizer implements Component.DrawTask float cy = (float) (getHeight() / 2 - Math.sin(i * Math.PI / 180) * (mRadius + mHeights[i * mPoints / 360])); // second bezier control point - float bx = (float) (getWidth() / 2 + Math.cos((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen + mHeights[i * mPoints / 360])); - float by = (float) (getHeight() / 2 - Math.sin((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen + mHeights[i * mPoints / 360])); + float bx = (float) (getWidth() / 2 + Math.cos((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen + mHeights[i * mPoints / 360])); + float by = (float) (getHeight() / 2 - Math.sin((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen + mHeights[i * mPoints / 360])); int lastPoint = i == 0 ? mPoints - 1 : i * mPoints / 360 - 1; // fist bezier control point - float ax = (float) (getWidth() / 2 + Math.cos((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen + mHeights[lastPoint])); - float ay = (float) (getHeight() / 2 - Math.sin((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen + mHeights[lastPoint])); + float ax = (float) (getWidth() / 2 + Math.cos((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen + mHeights[lastPoint])); + float ay = (float) (getHeight() / 2 - Math.sin((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen + mHeights[lastPoint])); mPath.cubicTo(ax, ay, bx, by, cx, cy); // inward float cx1 = (float) (getWidth() / 2 + Math.cos(i * Math.PI / 180) * (mRadius - mHeights[i * mPoints / 360])); float cy1 = (float) (getHeight() / 2 - Math.sin(i * Math.PI / 180) * (mRadius - mHeights[i * mPoints / 360])); - float bx1 = (float) (getWidth() / 2 + Math.cos((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen - mHeights[i * mPoints / 360])); - float by1 = (float) (getHeight() / 2 - Math.sin((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen - mHeights[i * mPoints / 360])); - float ax1 = (float) (getWidth() / 2 + Math.cos((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen - mHeights[lastPoint])); - float ay1 = (float) (getHeight() / 2 - Math.sin((i - (180 / mPoints)) * Math.PI / 180) * (mBezierControlPointLen - mHeights[lastPoint])); + float bx1 = (float) (getWidth() / 2 + Math.cos((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen - mHeights[i * mPoints / 360])); + float by1 = (float) (getHeight() / 2 - Math.sin((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen - mHeights[i * mPoints / 360])); + float ax1 = (float) (getWidth() / 2 + Math.cos((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen - mHeights[lastPoint])); + float ay1 = (float) (getHeight() / 2 - Math.sin((i - (double)((180 / mPoints))) * Math.PI / 180) * (mBezierControlPointLen - mHeights[lastPoint])); mPath1.cubicTo(ax1, ay1, bx1, by1, cx1, cy1); canvas.drawLine(cx, cy, cx1, cy1, mPaint); } diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/WaveVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/WaveVisualizer.java index d9cbe3e..4f4d2ea 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/WaveVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/WaveVisualizer.java @@ -123,27 +123,7 @@ public class WaveVisualizer extends BaseVisualizer implements Component.DrawTask @Override public void onDraw(Component component, Canvas canvas) { - if (mWidthOffset == -1) { - canvas.getLocalClipBounds(mClipBounds); - - mWidthOffset = component.getWidth() / nPoints; - - //initialize bezier points - for (int i = 0; i < mBezierPoints.length; i++) { - float posX = mClipBounds.left + (i * mWidthOffset); - - float posY; - if (mPositionGravity == PositionGravity.TOP) { - posY = mClipBounds.top; - } else { - posY = mClipBounds.bottom; - } - - mSrcY[i] = posY; - mDestY[i] = posY; - mBezierPoints[i].modify(posX, posY); - } - } + onDrawInit(component, canvas); // create the path and draw if (isVisualizationEnabled && mRawAudioBytes != null) { @@ -153,67 +133,99 @@ public class WaveVisualizer extends BaseVisualizer implements Component.DrawTask mWavePath.rewind(); - // find the destination bezier point for a batch - if (nBatchCount == 0) { - float randPosY = mDestY[mRandom.nextInt(nPoints)]; - for (int i = 0; i < mBezierPoints.length; i++) { - int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); - - int t = 0; - if (x < 1024) { - t = component.getHeight() - + ((byte) (Math.abs(mRawAudioBytes[x]) + 128)) * component.getHeight() / 128; - } - - float posY; - if (mPositionGravity == PositionGravity.TOP) { - posY = mClipBounds.bottom - t; - } else { - posY = mClipBounds.top + t; - } - - //change the source and destination y - mSrcY[i] = mDestY[i]; - mDestY[i] = posY; - } - - mDestY[mBezierPoints.length - 1] = randPosY; - } + onDrawModification(component); // increment batch count nBatchCount++; - // for smoothing animation + onDrawPainting(); + canvas.drawPath(mWavePath, mPaint); + } + super.addDrawTask(this::onDraw); + } + + private void onDrawPainting() { + // for smoothing animation + for (int i = 0; i < mBezierPoints.length; i++) { + mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mSrcY[i] + (((float) (nBatchCount) / mMaxBatchCount) * (mDestY[i] - mSrcY[i]))); + } + + // reset the batch count + if (nBatchCount == mMaxBatchCount) { + nBatchCount = 0; + } + + // calculate the bezier curve control points + for (int i = 1; i < mBezierPoints.length; i++) { + mBezierControlPoints1[i].modify((mBezierPoints[i].getPointX() + mBezierPoints[i - 1].getPointX()) / 2, mBezierPoints[i - 1].getPointY()); + mBezierControlPoints2[i].modify((mBezierPoints[i].getPointX() + mBezierPoints[i - 1].getPointX()) / 2, mBezierPoints[i].getPointY()); + } + + // create the path + mWavePath.moveTo(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); + for (int i = 1; i < mBezierPoints.length; i++) { + mWavePath.cubicTo(mBezierControlPoints1[i].getPointX(), mBezierControlPoints1[i].getPointY(), + mBezierControlPoints2[i].getPointX(), mBezierControlPoints2[i].getPointY(), + mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY()); + } + + if (mPaintStyle == PaintStyle.FILL) { + mWavePath.lineTo(mClipBounds.right, mClipBounds.bottom); + mWavePath.lineTo(mClipBounds.left, mClipBounds.bottom); + mWavePath.close(); + } + } + + private void onDrawModification(Component component) { + // find the destination bezier point for a batch + if (nBatchCount == 0) { + float randPosY = mDestY[mRandom.nextInt(nPoints)]; for (int i = 0; i < mBezierPoints.length; i++) { - mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mSrcY[i] + (((float) (nBatchCount) / mMaxBatchCount) * (mDestY[i] - mSrcY[i]))); - } + int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); - // reset the batch count - if (nBatchCount == mMaxBatchCount) { - nBatchCount = 0; - } + int t = 0; + if (x < 1024) { + t = component.getHeight() + + ((byte) (Math.abs(mRawAudioBytes[x]) + 128)) * component.getHeight() / 128; + } - // calculate the bezier curve control points - for (int i = 1; i < mBezierPoints.length; i++) { - mBezierControlPoints1[i].modify((mBezierPoints[i].getPointX() + mBezierPoints[i - 1].getPointX()) / 2, mBezierPoints[i - 1].getPointY()); - mBezierControlPoints2[i].modify((mBezierPoints[i].getPointX() + mBezierPoints[i - 1].getPointX()) / 2, mBezierPoints[i].getPointY()); - } + float posY; + if (mPositionGravity == PositionGravity.TOP) { + posY = mClipBounds.bottom - t; + } else { + posY = mClipBounds.top + t; + } - // create the path - mWavePath.moveTo(mBezierPoints[0].getPointX(), mBezierPoints[0].getPointY()); - for (int i = 1; i < mBezierPoints.length; i++) { - mWavePath.cubicTo(mBezierControlPoints1[i].getPointX(), mBezierControlPoints1[i].getPointY(), - mBezierControlPoints2[i].getPointX(), mBezierControlPoints2[i].getPointY(), - mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY()); + //change the source and destination y + mSrcY[i] = mDestY[i]; + mDestY[i] = posY; } - if (mPaintStyle == PaintStyle.FILL) { - mWavePath.lineTo(mClipBounds.right, mClipBounds.bottom); - mWavePath.lineTo(mClipBounds.left, mClipBounds.bottom); - mWavePath.close(); + mDestY[mBezierPoints.length - 1] = randPosY; + } + } + + private void onDrawInit(Component component, Canvas canvas) { + if (mWidthOffset == -1) { + canvas.getLocalClipBounds(mClipBounds); + + mWidthOffset = component.getWidth() / nPoints; + + //initialize bezier points + for (int i = 0; i < mBezierPoints.length; i++) { + float posX = mClipBounds.left + (i * mWidthOffset); + + float posY; + if (mPositionGravity == PositionGravity.TOP) { + posY = mClipBounds.top; + } else { + posY = mClipBounds.bottom; + } + + mSrcY[i] = posY; + mDestY[i] = posY; + mBezierPoints[i].modify(posX, posY); } - canvas.drawPath(mWavePath, mPaint); } - super.addDrawTask(this::onDraw); } } \ No newline at end of file diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java b/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java index d8e6bfa..1dcb47f 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java @@ -9,10 +9,12 @@ import ohos.aafwk.content.Operation; import ohos.agp.components.Component; import ohos.bundle.IBundleManager; import ohos.global.resource.RawFileDescriptor; +import ohos.hiviewdfx.HiLog; import ohos.media.common.Source; import ohos.media.player.Player; import java.io.IOException; +import java.util.logging.Logger; public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { @@ -46,7 +48,7 @@ public class MainAbilitySlice extends AbilitySlice implements Component.ClickedL impl.prepare(); impl.play(); } catch (IOException e) { - e.printStackTrace(); + Logger.getGlobal().finest(e.getMessage()); } } diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java b/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java index c7d5804..7690931 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java @@ -21,6 +21,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Timer; import java.util.TimerTask; +import java.util.logging.Logger; public class MusicStreamAbility extends Ability { private Image imgButton; @@ -102,16 +103,16 @@ public class MusicStreamAbility extends Ability { timer.cancel(); toastDialog.remove(); } catch (MalformedURLException e) { - e.printStackTrace(); + Logger.getGlobal().finest(e.getMessage()); } catch (IOException e) { - e.printStackTrace(); + Logger.getGlobal().finest(e.getMessage()); } finally { try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { - e.printStackTrace(); + Logger.getGlobal().finest(e.getMessage()); } } } diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java index 716b521..3b4c13a 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java @@ -49,5 +49,5 @@ public class PermissionUtils { /** * 权限数组 */ - public static String[] permission = {MICROPHONE, READ_MEDIA, WRITE_MEDIA,RECORD_AUDIO, INTERNET}; + public static final String[] permission = {MICROPHONE, READ_MEDIA, WRITE_MEDIA,RECORD_AUDIO, INTERNET}; } \ No newline at end of file diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PlaySoundUtil.java b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PlaySoundUtil.java index a3084ea..6b8ad59 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PlaySoundUtil.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PlaySoundUtil.java @@ -3,6 +3,7 @@ package com.gauravk.audiovisualizersample.util; import ohos.media.audio.*; import java.io.InputStream; +import java.util.logging.Logger; public class PlaySoundUtil { private final int SAMPLE_RATE = 192000; @@ -51,7 +52,7 @@ public class PlaySoundUtil { } soundInputStream.close(); } catch (Exception e) { - e.printStackTrace(); + Logger.getGlobal().finest(e.getMessage()); } if (audioRenderer.getState() == AudioRenderer.State.STATE_PLAYING) { audioRenderer.pause(); diff --git a/entry/src/ohosTest/java/com/github/gabrielbb/cutout/ExampleTest.java b/entry/src/ohosTest/java/com/github/gabrielbb/cutout/ExampleTest.java index a59f770..c5b52fa 100644 --- a/entry/src/ohosTest/java/com/github/gabrielbb/cutout/ExampleTest.java +++ b/entry/src/ohosTest/java/com/github/gabrielbb/cutout/ExampleTest.java @@ -3,7 +3,7 @@ package com.github.gabrielbb.cutout; import org.junit.Test; public class ExampleTest { - // UI项目不涉及单元测试用例 + //不涉及单元测试用例 @Test public void onStart() { } -- Gitee From 83c1a0a71ef1fbd2f52984ec58935b1e29e65741 Mon Sep 17 00:00:00 2001 From: ZYF949 <446962864@qq.com> Date: Mon, 7 Jun 2021 18:59:31 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0gitee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++-- README.OPENRESOURCE.md | 2 +- README.md | 4 ++-- .../audiovisualizer/visualizer/CircleLineVisualizer.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 644c92e..a191011 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,5 +3,5 @@ ohos第一个版本 * 实现了原库大部分api -* 因为缺少对应api,当前仅支持播放wav音频时背景联动,若播放mp3则背景不联动 -* CIRCLEINE黑色边角设置对应颜色无效果,暂未实现 \ No newline at end of file +* 因为缺少对应api,Stream visualizer模式下,播放音乐控件没有联动效果 +* Circleine visualizer模式下,黑色边角设置对应颜色无效果 \ No newline at end of file diff --git a/README.OPENRESOURCE.md b/README.OPENRESOURCE.md index 31a4954..b878057 100644 --- a/README.OPENRESOURCE.md +++ b/README.OPENRESOURCE.md @@ -5,7 +5,7 @@ "Name": "audio-visualizer-android", "License": "Apache License", "License File": "LICENSE", - "Version Number": "0.9.1", + "Version Number": "v0.9.1", "Upstream URL": "https://github.com/gauravk95/audio-visualizer-android", "Description": "A light-weight and easy-to-use Audio Visualizer for Android using the Android Canvas." } diff --git a/README.md b/README.md index 8630e66..1965b45 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ * 项目移植状态:当前仅支持播放wav格式音频,若想播放mp3音频,背景无法联动 * 调用差异:无 * 开发版本:sdk5,DevEco Studio 2.1 Release -* 基线版本:Relesase版本号0.9.1 +* 基线版本:Relesase版本号v0.9.1 #### 效果演示 @@ -37,7 +37,7 @@ dependencies { } ``` -在sdk5,DevEco Studio2.1 beta4下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 +在sdk5,DevEco Studio 2.1 Release下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java index 1115c6a..8d0c5a2 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java @@ -160,7 +160,7 @@ public class CircleLineVisualizer extends BaseVisualizer implements Component.Dr * @param h 0 * @param oldw 1176 * @param oldh 1800 - * @return + * @return boolean */ @Override public boolean onArrange(int w, int h, int oldw, int oldh) { -- Gitee