diff --git a/CHANGE_LOG.md b/CHANGE_LOG.md index 363a1689c8d0a663fea441df8a52c748ada483a2..1f057bdbb8838fdd9f0c040b95e82ff735cf296c 100644 --- a/CHANGE_LOG.md +++ b/CHANGE_LOG.md @@ -9,7 +9,7 @@ 增加 K线图成交量柱状图 -![S70413-225235](Screenshots/S70628-230542.jpg) +![](https://images.gitee.com/uploads/images/2021/0517/193501_89975ed3_7648707.png "screenshots0.PNG") ### 0.1.4 @@ -19,7 +19,7 @@ fixed #10 -![](http://ww1.sinaimg.cn/large/006tNc79gy1ffu3gin235j30f00qoaar.jpg) +![](https://images.gitee.com/uploads/images/2021/0517/193531_214446fa_7648707.png "screenshots1.PNG") ### 0.1.3 @@ -27,7 +27,7 @@ fixed #10 添加 设置 X 轴、Y 轴 MarkerView 对齐方向 -![](http://ww1.sinaimg.cn/large/006tNbRwgy1feysmzj8atg30dc0nkdy5.gif) +![](https://images.gitee.com/uploads/images/2021/0517/193541_4166811a_7648707.png "screenshots2.PNG") ### 0.1.2 diff --git a/README.md b/README.md index 4e539d06aca79fa1a28209408f57ac12d6a2ec46..9fc3d58de815ffa95a775fcab68add0de09e40fd 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,7 @@ - 附带的程序示例有:默认左滑右滑加载、禁用左滑右滑加载、多个指标共同联动显示、在 Fragment 中使用、带有下拉刷新的需求中使用、横竖屏切换(自动旋转)、简单分时图 #### 效果演示 -![](https://images.gitee.com/uploads/images/2021/0515/155903_ed3f65ad_8751121.png "screenshots0.PNG") -![](https://images.gitee.com/uploads/images/2021/0515/155924_8ae9f455_8751121.png "screenshots1.PNG") -![](https://images.gitee.com/uploads/images/2021/0515/155935_33088690_8751121.png "screenshots2.PNG") + #### 安装教程 @@ -46,7 +44,7 @@ allprojects { ```gradle dependencies { - implementation('com.gitee.chinasoft_ohos:ikvStockChart:0.0.1-SNAPSHOT') + implementation('com.gitee.chinasoft_ohos:timetable-view:0.0.1-SNAPSHOT') ...... } ``` @@ -60,7 +58,7 @@ allprojects { #### 使用说明 ##### 添加控件 -该控件包含的基础组件有日期栏、侧边栏、课表视图,在布局文件中加入如下代码后会包含这三个基础组件,注意要添加背景色,没有背景图片可以添加白色背景。 +该控件包含 时间线,k线,macd,kdj,rsi,boll索引和交互式手势操作,包括左右滑动刷新,缩放,突出显示。 XML中添加控件: @@ -137,7 +135,7 @@ CloudTest代码测试无异常 当前版本demo功能与原组件基本无差异 -测试员:陈翔,朱品,邓世雄 +测试员:陈翔,朱品,张小昤 #### 版本迭代 diff --git a/entry/src/main/java/com/wordplat/quickstart/mvp/BaseRequest.java b/entry/src/main/java/com/wordplat/quickstart/mvp/BaseRequest.java index ec9f127000b09f48b3f292939cde09e2ca724e4b..7bbc2c2f588cf9907634bb0041f4b422000278d9 100644 --- a/entry/src/main/java/com/wordplat/quickstart/mvp/BaseRequest.java +++ b/entry/src/main/java/com/wordplat/quickstart/mvp/BaseRequest.java @@ -144,6 +144,9 @@ public class BaseRequest { * @param subscriber subscriber * @param requestParams 请求参数 * @param responseObject 返回数据的 Class 类型 + * @param httpMethod httpMethod + * @param T + * @param T * @return 成功返回 ServerResponse 对象,失败返回空对象 */ private static R handleRequestServer(Subscriber subscriber, diff --git a/entry/src/main/java/com/wordplat/quickstart/mvp/StockPresenter.java b/entry/src/main/java/com/wordplat/quickstart/mvp/StockPresenter.java index 5f8b3cb878d87157c7b452351a25627ec205dbaf..02d6b642c4302cd9b38796ef621d03b475b5d4da 100644 --- a/entry/src/main/java/com/wordplat/quickstart/mvp/StockPresenter.java +++ b/entry/src/main/java/com/wordplat/quickstart/mvp/StockPresenter.java @@ -40,7 +40,6 @@ public class StockPresenter extends BasePresenter { /** * KLineType - * */ public enum KLineType { /** @@ -112,7 +111,7 @@ public class StockPresenter extends BasePresenter { * getKLineType * * @param kLineType - * @return + * @return String */ private String getKLineType(KLineType kLineType) { String type = "d"; @@ -128,7 +127,8 @@ public class StockPresenter extends BasePresenter { case MONTH: type = "M"; break; - default:break; + default: + break; } return type; diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java index 99c6a3fc9b39a06a37b2e5df7ff702acfb2fe5c8..e24a77baf5212984d11c753d53d9b1c252cd2fae 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java @@ -26,7 +26,6 @@ import com.wordplat.ikvstockchart.render.KLineRender; import com.wordplat.quickstart.ResourceTable; import com.wordplat.quickstart.base.BaseAbilitySlice; import com.wordplat.quickstart.utils.ToastViewDialog; - import ohos.aafwk.content.Intent; import ohos.agp.animation.AnimatorProperty; import ohos.agp.components.*; @@ -138,7 +137,6 @@ public class Enable_Left_And_Right_Refresh_Slice extends BaseAbilitySlice { entry.getDn()); } - MA_Text.setText(maString); Volume_Text.setText(volumeString); StockIndex_Text.setText(str); diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java index f716a224cff463697a892b95774e591f9bdda7d6..fca20e66eafd32c213cbaa0d5b1e9b175fb4d165 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java @@ -76,16 +76,16 @@ public class HeadDefaultComponent extends HeadBaseComponent { public void onHeadVisible() { } - @Override - public void onHeadOver() { - } - @Override public void onRefresh() { mAnimator = mImage.createAnimatorProperty(); mAnimator.setDuration(2000).rotate(360).setLoopedCount(AnimatorProperty.INFINITE).setTarget(mImage).start(); } + @Override + public void onHeadOver() { + } + @Override public void onFinish() { mAnimator.cancel(); diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/RefreshComponent.java b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/RefreshComponent.java index 386d6f050eeb7406c3bb8398ba17a1fef0851ec6..774cede2628dc0454787b03a48e7e80e2bd71fca 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/RefreshComponent.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/RefreshComponent.java @@ -176,7 +176,7 @@ public class RefreshComponent extends ComponentContainer implements Component.La endTime = System.currentTimeMillis(); if (startTime != 0 && isPull) { long cutTime = endTime - startTime; - mTextTime.setVisibility(VISIBLE); + mTextTime.setVisibility(HIDE); mTextTime.setText("最后更新:" + cutStringTime(cutTime/1000) + "之前"); isPull = false; } @@ -231,7 +231,7 @@ public class RefreshComponent extends ComponentContainer implements Component.La @Override public void onRefreshed(Component component) { - Component head = getComponentAt(0); + Component head = getComponentAt(0); headBaseComponent.mPullRefreshHeight = head.getHeight(); Component content = getComponentAt(1); head.setComponentPosition(0, content.getTop() - head.getHeight(), head.getRight(), content.getTop()); @@ -254,7 +254,7 @@ public class RefreshComponent extends ComponentContainer implements Component.La @Override public void setRefreshListener(RefreshListener listener) { - refreshListener = listener; + refreshListener = listener; } @Override @@ -310,3 +310,4 @@ public class RefreshComponent extends ComponentContainer implements Component.La refreshListener.onRefresh(); } } + diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java index 1a514745ce44467a92027ce91b05030ee79835b1..1b83e44bc512562adc2181c2def90d7f0c13e687 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java @@ -1144,36 +1144,69 @@ public class BottomNavigation extends Component implements Component.DrawTask, C /** * getTitleColorActive * - * @return + * @return int */ public int getTitleColorActive() { return titleColorActive; } + /** + * getTitleColorInactive + * + * @return int + */ public int getTitleColorInactive() { return titleColorInactive; } + /** + * getColoredTitleColorActive + * + * @return int + */ public int getColoredTitleColorActive() { return coloredTitleColorActive; } + /** + * getColoredTitleColorInactive + * + * @return int + */ public int getColoredTitleColorInactive() { return coloredTitleColorInactive; } + /** + * getItemDisableColor + * + * @return int + */ public int getItemDisableColor() { return itemDisableColor; } + /** + * setTouchEffect + * + * @param touchEffect + */ public void setTouchEffect(boolean touchEffect) { this.touchEffect = touchEffect; } + /** + * getTouchEffect + * + * @return boolean + */ public boolean getTouchEffect() { return touchEffect; } + /** + * setupItemsPixelMaps + */ private void setupItemsPixelMaps() { if (items != null && items.size() > 0) { for (BottomNavigationItem bottomNavigationItem : items) { @@ -1182,6 +1215,9 @@ public class BottomNavigation extends Component implements Component.DrawTask, C } } + /** + * getMeasurements + */ private void getMeasurements() { if (isClassic()) { float minWidth = dp2px(104); diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java index 22d525c5a6675877508bdcf0225647cdcd633df5..ccae62165be1e48b4d10d2315e13f63055066362 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java @@ -207,7 +207,7 @@ public final class LruDiskCache { DiskCacheFile result = null; - entity.setPath(new File(this.cacheDir, MD5.md5(entity.getKey())).getCanonicalPath()); + entity.setPath(new File(this.cacheDir, entity.getKey()).getCanonicalPath()); String tempFilePath = entity.getPath() + TEMP_FILE_SUFFIX; ProcessLock processLock = ProcessLock.tryLock(tempFilePath, true); if (processLock != null && processLock.isValid()) { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/MD5.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/MD5.java index 9735ca4949a646be7335a7cd9debf853edd43bc2..93c4dc05f5b192beeeaa756e99d71c74f4dc1445 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/MD5.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/MD5.java @@ -16,6 +16,8 @@ import java.security.NoSuchAlgorithmException; * @since 2021-05-08 */ public final class MD5 { + private static final String strMd5 = "MD5"; + private static final String utf8 = "UTF-8"; private static final char[] CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; @@ -39,54 +41,4 @@ public final class MD5 { } return hex.toString(); } - - /** - * md5 - * - * @param file - * @return String - * @throws IOException - * @throws RuntimeException - */ - public static String md5(File file) throws IOException { - MessageDigest messagedigest = null; - FileInputStream in = null; - FileChannel ch = null; - byte[] encodeBytes = null; - try { - messagedigest = MessageDigest.getInstance("MD5"); - in = new FileInputStream(file); - ch = in.getChannel(); - MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); - messagedigest.update(byteBuffer); - encodeBytes = messagedigest.digest(); - } catch (NoSuchAlgorithmException neverHappened) { - throw new RuntimeException(neverHappened); - } finally { - IOUtil.closeQuietly(in); - IOUtil.closeQuietly(ch); - } - - return toHexString(encodeBytes); - } - - /** - * md5 - * - * @param string - * @return String - * @throws RuntimeException - */ - public static String md5(String string) { - byte[] encodeBytes = null; - try { - encodeBytes = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); - } catch (NoSuchAlgorithmException neverHappened) { - throw new RuntimeException(neverHappened); - } catch (UnsupportedEncodingException neverHappened) { - throw new RuntimeException(neverHappened); - } - - return toHexString(encodeBytes); - } } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java index 53d7ac829244efa485b0d5fabe346e5094de999a..53c783d1ba1cc61cf828f407c8c21a844544758d 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java @@ -161,8 +161,8 @@ public final class ProcessLock implements Closeable { /** * 取得字符串的自定义hash值, 尽量保证255字节内的hash不重复. * - * @param str - * @return + * @param str str + * @return String */ private static String customHash(String str) { if (TextUtils.isEmpty(str)) { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/db/table/ColumnEntity.java b/entry/src/main/java/com/wordplat/quickstart/xutils/db/table/ColumnEntity.java index ec445862053e6511252ebe8ae3dca234ef65481a..3e5853c21d6b2f01e6266e4a25bd17e478166610 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/db/table/ColumnEntity.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/db/table/ColumnEntity.java @@ -93,7 +93,8 @@ public final class ColumnEntity { * getColumnValue * * @param entity - * @return + * @return Object + * @SuppressWarnings uncheck */ @SuppressWarnings("unchecked") public Object getColumnValue(Object entity) { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java index 713102bc7dedad5b63e8f38a6bea4cfedc44f7da..fa44ecf6a0db643e35288e00bed92bf8ac13ac4f 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java @@ -10,6 +10,7 @@ import com.wordplat.quickstart.xutils.http.ProgressHandler; import java.io.*; import java.util.List; +import java.util.Random; import java.util.concurrent.atomic.AtomicLong; /** @@ -29,7 +30,7 @@ public class MultipartBody implements ProgressBody { private List multipartParams; private long total = 0; private long current = 0; - + private Random random = new Random(); /** * \ * MultipartBody @@ -60,7 +61,7 @@ public class MultipartBody implements ProgressBody { } private void generateContentType() { - String boundaryPostfix = Double.toHexString(Math.random() * 0xFFFF); + String boundaryPostfix = Double.toHexString(random.nextDouble() * 0xFFFF); boundaryPostfixBytes = boundaryPostfix.getBytes(); contentType = "multipart/form-data; boundary=" + new String(BOUNDARY_PREFIX_BYTES) + boundaryPostfix; } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageDecoder.java b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageDecoder.java index e00881a2330f0eb5bf2700fdf40b3a624c830b68..5cdc8361a2df8d40b7e30c3a166c92a5d2664e79 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageDecoder.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageDecoder.java @@ -110,7 +110,7 @@ public final class ImageDecoder { /** * isGif * - * @param file + * @param file file * @return boolean */ public static boolean isGif(File file) { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java index afad962a48a3836d29c98a583c69a1db48d4e7d8..8c527bbb8a3e62e74d28fa2896875bc1cf35c081 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java @@ -116,6 +116,11 @@ final class ImageLoader implements /** * load from Network or DiskCache, invoke in any thread. + * + * @param url url + * @param options options + * @param callback callback + * @return Cancelable */ static Cancelable doLoadDrawable(final String url, final ImageOptions options, @@ -131,6 +136,11 @@ final class ImageLoader implements /** * load from Network or DiskCache, invoke in any thread. + * + * @param url url + * @param options options + * @param callback callback + * @return Cancelable */ /*package*/ static Cancelable doLoadFile(final String url, diff --git a/entry/src/main/resources/base/graphic/border.xml b/entry/src/main/resources/base/graphic/border.xml new file mode 100644 index 0000000000000000000000000000000000000000..83fff8a5750750f039b45bed8913f83a794ffa6d --- /dev/null +++ b/entry/src/main/resources/base/graphic/border.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/item_text.xml b/entry/src/main/resources/base/layout/item_text.xml index ec37720d1ce13e0087ba917321b233ff2f12fdad..1370e40193c150da8cdf3fb0efe5b8358511b887 100644 --- a/entry/src/main/resources/base/layout/item_text.xml +++ b/entry/src/main/resources/base/layout/item_text.xml @@ -3,7 +3,7 @@ xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="50vp" ohos:width="match_parent" - ohos:background_element="#ffffff" + ohos:background_element="#fafafa" ohos:orientation="vertical"> + ohos:background_element="#eeeeee" + ohos:orientation="vertical"> - + ohos:width="match_content" + ohos:background_element="$graphic:border" + ohos:orientation="vertical"> + + + \ No newline at end of file diff --git a/entry/src/test/java/com/wordplat/quickstart/ExampleTest.java b/entry/src/test/java/com/wordplat/quickstart/ExampleTest.java index f4a081abc9c81ab39c8767058f4a040985f05251..bd4d4e7e898c18a328bd3b1cf1430d3383684342 100644 --- a/entry/src/test/java/com/wordplat/quickstart/ExampleTest.java +++ b/entry/src/test/java/com/wordplat/quickstart/ExampleTest.java @@ -6,4 +6,6 @@ public class ExampleTest { @Test public void onStart() { } + + } diff --git a/gradlew b/gradlew index 9d82f78915133e1c35a6ea51252590fb38efac2f..2fe81a7d95e4f9ad2c9b2a046707d36ceb3980b3 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,20 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 a copy of the License at +# +# https://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. +# ############################################################################## ## @@ -6,20 +22,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +64,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +75,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +105,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -105,8 +125,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -134,27 +154,30 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282aa6885fb573c106b3551f7275c5f17e8e..62bd9b9ccefea2b65ae41e5d9a545e2021b90a1d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -8,14 +24,17 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +65,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +78,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/ikvStockChart/build.gradle b/ikvStockChart/build.gradle index 25ddf0cf1daa8f1533639ebc05ce352f4019b8ff..722f8536bb7169d65c6d24d7ab2c522ff9deb9e1 100644 --- a/ikvStockChart/build.gradle +++ b/ikvStockChart/build.gradle @@ -18,4 +18,6 @@ ohos { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.13' + testImplementation 'org.mockito:mockito-core:2.23.0' + testImplementation 'com.google.truth:truth:0.39' } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java index 5239eeca1831491f42f03f9fd883b33d14d3c49f..6aa274aa9aa11cfc232159481e8df61639cfe75d 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java @@ -36,6 +36,7 @@ import ohos.multimodalinput.event.TouchEvent; *

Date: 2017/3/22

* * @author afon + * @since 2017-03-22 * @deprecated 这是一个含有股票技术指标的K线图示例,建议不要使用这个类用于真实项目中,此示例对如何编写自己的自定义布局提供参考。 */ @@ -65,28 +66,43 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli private RadioButton BOLL_But; private boolean isOnClickButton; + /** + * InteractiveKLineLayout + * + * @param context context + */ public InteractiveKLineLayout(Context context) { this(context, null); } + /** + * InteractiveKLineLayout + * + * @param context context + * @param attrs attrs + */ public InteractiveKLineLayout(Context context, AttrSet attrs) { this(context, attrs, 0); } + /** + * InteractiveKLineLayout + * + * @param context context + * @param attrs attrs + * @param defStyleAttr defStyleAttr + */ public InteractiveKLineLayout(Context context, AttrSet attrs, int defStyleAttr) { super(context, attrs, ""); - this.context = context; - - stockMarkerViewHeight = ViewUtils.vpToPx(context,15);; - stockIndexViewHeight = ViewUtils.vpToPx(context,100); - stockIndexTabHeight = ViewUtils.vpToPx(context,20);; - + stockMarkerViewHeight = ViewUtils.vpToPx(context, 15); + stockIndexViewHeight = ViewUtils.vpToPx(context, 100); + stockIndexTabHeight = ViewUtils.vpToPx(context, 20); initUI(context, attrs, defStyleAttr); } private void initUI(Context context, AttrSet attrs, int defStyleAttr) { - kLineView = new InteractiveKLineView(context,attrs); + kLineView = new InteractiveKLineView(context, attrs); kLineRender = (KLineRender) kLineView.getRender(); kLineRender.setSizeColor(ViewUtils.getSizeColor(context, attrs, defStyleAttr)); @@ -214,6 +230,8 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli KDJ_But.setClickedListener(this); BOLL_But.setClickedListener(this); + kLineView.postLayout(); + showMACD(); } @@ -271,10 +289,10 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli KDJ_But.setChecked(false); BOLL_But.setChecked(false); - MACD_But.setTextColor(new Color(Color.rgb(30,130,210))); - RSI_But.setTextColor(new Color(Color.rgb(136,136,136))); - KDJ_But.setTextColor(new Color(Color.rgb(136,136,136))); - BOLL_But.setTextColor(new Color(Color.rgb(136,136,136))); + MACD_But.setTextColor(new Color(Color.rgb(30, 130, 210))); + RSI_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + KDJ_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + BOLL_But.setTextColor(new Color(Color.rgb(136, 136, 136))); currentRect = macdIndex.getRect(); } @@ -293,10 +311,10 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli KDJ_But.setChecked(false); BOLL_But.setChecked(false); - MACD_But.setTextColor(new Color(Color.rgb(136,136,136))); - RSI_But.setTextColor(new Color(Color.rgb(30,130,210))); - KDJ_But.setTextColor(new Color(Color.rgb(136,136,136))); - BOLL_But.setTextColor(new Color(Color.rgb(136,136,136))); + MACD_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + RSI_But.setTextColor(new Color(Color.rgb(30, 130, 210))); + KDJ_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + BOLL_But.setTextColor(new Color(Color.rgb(136, 136, 136))); currentRect = rsiIndex.getRect(); } @@ -315,10 +333,10 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli KDJ_But.setChecked(true); BOLL_But.setChecked(false); - MACD_But.setTextColor(new Color(Color.rgb(136,136,136))); - RSI_But.setTextColor(new Color(Color.rgb(136,136,136))); - KDJ_But.setTextColor(new Color(Color.rgb(30,130,210))); - BOLL_But.setTextColor(new Color(Color.rgb(136,136,136))); + MACD_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + RSI_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + KDJ_But.setTextColor(new Color(Color.rgb(30, 130, 210))); + BOLL_But.setTextColor(new Color(Color.rgb(136, 136, 136))); currentRect = kdjIndex.getRect(); } @@ -337,10 +355,10 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli KDJ_But.setChecked(false); BOLL_But.setChecked(true); - MACD_But.setTextColor(new Color(Color.rgb(136,136,136))); - RSI_But.setTextColor(new Color(Color.rgb(136,136,136))); - KDJ_But.setTextColor(new Color(Color.rgb(136,136,136))); - BOLL_But.setTextColor(new Color(Color.rgb(30,130,210))); + MACD_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + RSI_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + KDJ_But.setTextColor(new Color(Color.rgb(136, 136, 136))); + BOLL_But.setTextColor(new Color(Color.rgb(30, 130, 210))); currentRect = bollIndex.getRect(); } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java index ab88ae2e14c32379c8d61a2ada5f72a924e84411..f80b46c97dcdbb3d981dbccd549960dc5933b550 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java @@ -26,7 +26,6 @@ import com.wordplat.ikvstockchart.detector.ScaleGestureDetector; import com.wordplat.ikvstockchart.detector.ViewConfiguration; import com.wordplat.ikvstockchart.entry.Entry; import com.wordplat.ikvstockchart.entry.EntrySet; -import com.wordplat.ikvstockchart.entry.StockDataTest; import com.wordplat.ikvstockchart.render.AbstractRender; import com.wordplat.ikvstockchart.render.KLineRender; import ohos.agp.components.AttrSet; @@ -34,7 +33,6 @@ import ohos.agp.components.Component; import ohos.agp.components.ScrollHelper; import ohos.agp.render.Canvas; import ohos.agp.utils.RectFloat; -import ohos.agp.window.dialog.ToastDialog; import ohos.app.Context; import ohos.app.dispatcher.TaskDispatcher; import ohos.eventhandler.EventHandler; @@ -51,13 +49,8 @@ import ohos.multimodalinput.event.TouchEvent; * @since 2021-05-09 */ public class InteractiveKLineView extends Component implements Component.DrawTask { - static final HiLogLabel LOG_LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "AbstractRender"); + //static final HiLogLabel LOG_LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "AbstractRender"); private static final boolean DEBUG = true; - - /** - * 控制是否可以进行下拉刷新 - */ - private boolean isRefresh; /** * 与滚动控制、滑动加载数据相关的属性 */ @@ -98,7 +91,10 @@ public class InteractiveKLineView extends Component implements Component.DrawTas notifyDataSetChanged(); } }); - + /** + * 控制是否可以进行下拉刷新 + */ + private boolean isRefresh; private GestureMoveActionCompat gestureCompat = new GestureMoveActionCompat(null); /** * 与视图大小相关的属性 @@ -112,8 +108,6 @@ public class InteractiveKLineView extends Component implements Component.DrawTas private AbstractRender render; private EntrySet entrySet; private KLineHandler kLineHandler; - - private int kLineStatus = KLINE_STATUS_IDLE; private int lastFlingX = 0; private int lastScrollDx = 0; @@ -284,18 +278,9 @@ public class InteractiveKLineView extends Component implements Component.DrawTas if (!onLongPress && !onDoubleFingerPress && !onVerticalMove) { if (onDragging && !render.canScroll(distanceX) && render.canDragging(distanceX)) { dragging((int) distanceX); - - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d dragging: -------> " + distanceX + ", maxScrollOffset = " - + render.getMaxScrollOffset() + ", tranX = " + render.getCurrentTransX()); - } } else { scroll((int) distanceX); - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d scroll: -------> " + distanceX + ", maxScrollOffset = " - + render.getMaxScrollOffset() + ", tranX = " + render.getCurrentTransX()); - } } return true; } else { @@ -307,9 +292,7 @@ public class InteractiveKLineView extends Component implements Component.DrawTas public boolean onFling(TouchEvent e1, TouchEvent e2, float velocityX, float velocityY, float scrollY0, float scrollY1) { lastFlingX = 0; if (!onLongPress && !onDoubleFingerPress && !onVerticalMove && render.canScroll(0)) { - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d onFling: ------->"); - } + scroller.doFling(0, 0, (int) -velocityX, 0, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); @@ -320,7 +303,6 @@ public class InteractiveKLineView extends Component implements Component.DrawTas } }); - private void highlight(float x, float y) { render.onHighlight(x, y - 128); invalidate(); @@ -394,7 +376,7 @@ public class InteractiveKLineView extends Component implements Component.DrawTas refreshComplete(); } notifyDataSetChanged(); - } else if (dx > 0){ + } else if (dx > 0) { render.updateCurrentTransX(dx); render.updateOverScrollOffset(dx); notifyDataSetChanged(); @@ -489,11 +471,6 @@ public class InteractiveKLineView extends Component implements Component.DrawTas */ public void refreshComplete(boolean reverse) { final int overScrollOffset = (int) render.getOverScrollOffset(); - - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d refreshComplete: refreshComplete... overScrollOffset = " + overScrollOffset); - } - if (overScrollOffset != 0) { kLineStatus = KLINE_STATUS_SPRING_BACK; lastFlingX = 0; @@ -577,9 +554,7 @@ public class InteractiveKLineView extends Component implements Component.DrawTas viewRect.bottom = component.getHeight() - viewPadding; - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d onSizeChanged: " + viewRect); - } + if (entrySet == null) { @@ -626,7 +601,7 @@ public class InteractiveKLineView extends Component implements Component.DrawTas onTouch = true; onDragging = false; if (viewOnTouchInterface != null) { - viewOnTouchInterface.touch(action,endUpY); + viewOnTouchInterface.touch(action, endUpY); } break; } @@ -647,7 +622,7 @@ public class InteractiveKLineView extends Component implements Component.DrawTas } case TouchEvent.PRIMARY_POINT_UP: if (viewOnTouchInterface != null) { - viewOnTouchInterface.touch(action,endUpY); + viewOnTouchInterface.touch(action, endUpY); } case TouchEvent.CANCEL: { onLongPress = false; @@ -697,17 +672,10 @@ public class InteractiveKLineView extends Component implements Component.DrawTas } } - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d computeScrollOffset: canScroll = " + render.canScroll(dx) - + ", overScrollOffset = " + render.getOverScrollOffset() - + ", dx = " + dx + ", tranX = " + render.getCurrentTransX()); - } + } else { final float overScrollOffset = render.getOverScrollOffset(); - if (DEBUG) { - HiLog.info(LOG_LABEL, "##d overScrollOffset: canScroll = " + render.canScroll(0) - + ", overScrollOffset = " + overScrollOffset); - } + if (!onTouch && overScrollOffset != 0 && kLineStatus == KLINE_STATUS_IDLE) { lastScrollDx = 0; @@ -727,10 +695,6 @@ public class InteractiveKLineView extends Component implements Component.DrawTas } } - if (DEBUG) { - HiLog.debug(LOG_LABEL, "##d startScroll: LOADING... dx = " + dx); - } - kLineStatus = KLINE_STATUS_RELEASE_BACK; lastFlingX = 0; scroller.startScroll(0, 0, (int) dx, 0); @@ -767,11 +731,22 @@ public class InteractiveKLineView extends Component implements Component.DrawTas }); } + private boolean isFirst = true; @Override public void onDraw(Component component, Canvas canvas) { render.render(canvas); - postLayout(); + TaskDispatcher globalTaskDispatcher = mContext.getMainTaskDispatcher(); + Runnable runnable = new Runnable() { + @Override + public void run() { + if (isFirst) { + postLayout(); + isFirst = false; + } + } + }; + globalTaskDispatcher.delayDispatch(runnable, 1000); } public ViewOnTouchInterface viewOnTouchInterface; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/SimpleKLineHandler.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/SimpleKLineHandler.java index c71be925aa4312c4b17daba7d242c2321cfa87fc..7851faae889719391c15858c7b3fcf594e111b22 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/SimpleKLineHandler.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/SimpleKLineHandler.java @@ -19,6 +19,7 @@ package com.wordplat.ikvstockchart; import com.wordplat.ikvstockchart.entry.Entry; + import ohos.multimodalinput.event.TouchEvent; /** @@ -58,10 +59,10 @@ public class SimpleKLineHandler implements KLineHandler { * onDoubleTap * * @param e - * @param x - * @param y + * @param floatx + * @param floaty */ - public void onDoubleTap(TouchEvent e, float x, float y) { + public void onDoubleTap(TouchEvent e, float floatx, float floaty) { } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java index 590c98d91bfc641b1ec60aa7cb91eaef2a91b37a..b13b95a8a566084627747bf828cc66ac58df731c 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java @@ -78,8 +78,10 @@ public class GestureMoveActionCompat { } /** - * @param e 事件 e - * @param x 本次事件的坐标 x。可以是 e.getRawX() 或是 e.getX(),具体看情况 + * onTouchEvent + * + * @param e 事件e + * @param x x 本次事件的坐标 x。可以是 e.getRawX() 或是 e.getX(),具体看情况 * @param y 本次事件的坐标 y。可以是 e.getRawY() 或是 e.getY(),具体看情况 * @return 事件是否是横向滑动 */ @@ -109,8 +111,7 @@ public class GestureMoveActionCompat { if (gestureMoveListener != null) { gestureMoveListener.onHorizontalMove(e, x, y); } - } else if (interceptStatus != 2 && - (dragging || deltaX < deltaY && deltaY > touchSlop)) { + } else if (interceptStatus != 2 && (dragging || deltaX < deltaY && deltaY > touchSlop)) { interceptStatus = 1; dragging = true; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java index 7bd5f02828ced8a3fc63d1497d271f7272b8065a..84d2f0959304315c4600b148a68a982d412fe8d4 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java @@ -68,7 +68,9 @@ public class PerformenceAnalyser { } /** - * 设置观察点回调 + * 设置观察点回调、 + * + * @param analyserCallback */ public void setAnalyserCallback(AnalyserCallback analyserCallback) { this.analyserCallback = analyserCallback; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/ViewUtils.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/ViewUtils.java index d47ce5e8c5bbb68286e475c8040ede1a6df8a241..7022bf6d8bcf3545c39f9764b93df3e8cd37d75c 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/ViewUtils.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/ViewUtils.java @@ -26,6 +26,7 @@ import com.wordplat.ikvstockchart.entry.Entry; import com.wordplat.ikvstockchart.entry.EntrySet; import com.wordplat.ikvstockchart.entry.SizeColor; import com.wordplat.ikvstockchart.utils.TypedAttrUtils; + import ohos.agp.components.AttrHelper; import ohos.agp.components.AttrSet; import ohos.agp.render.Paint; @@ -42,6 +43,11 @@ import static ohos.agp.components.AttrHelper.getDensity; * @since 2021-05-09 */ public class ViewUtils { + + private ViewUtils() { + + } + /** * 根据手机的分辨率从 vp 的单位 转成为 px(像素) * @@ -58,7 +64,7 @@ public class ViewUtils { * * @param context * @param px - * @return int + * @return */ public static int pxTovp(final Context context, final float px) { return Math.round(px / getDensity(context) + 0.5f); @@ -66,8 +72,15 @@ public class ViewUtils { /** * 设置 蜡烛图画笔的颜色和是否空心 + * + * @param candlePaint candlePaint + * @param entrySet candlePaint + * @param currentEntryIndex candlePaint + * @param sizeColor candlePaint + * @return Entry */ - public static Entry setUpCandlePaint(Paint candlePaint, EntrySet entrySet, int currentEntryIndex, SizeColor sizeColor) { + public static Entry setUpCandlePaint(Paint candlePaint, EntrySet entrySet + , int currentEntryIndex, SizeColor sizeColor) { Entry entry = entrySet.getEntryList().get(currentEntryIndex); // 设置 涨、跌的颜色 diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java index e50b8caed85b40d8c6b28b5a2cdad01892e09501..38d2e1e93f6989f0c63612e02c4e996389be3ce1 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java @@ -169,10 +169,12 @@ public class GestureDetector { /** * onFling * - * @param e1 - * @param e2 - * @param velocityX - * @param velocityY + * @param e1 e1 + * @param e2 e2 + * @param velocityX velocityX + * @param velocityY velocityY + * @param scrollY0 scrollY0 + * @param scrollY1 scrollY1 * @return boolean */ public boolean onFling(TouchEvent e1, TouchEvent e2, float velocityX, @@ -528,7 +530,6 @@ public class GestureDetector { mDeferConfirmSingleTap = false; if (mIsLongpressEnabled) { - mHandler.removeEvent(LONG_PRESS); mHandler.sendTimingEvent(LONG_PRESS, mCurrentDownEvent.getStartTime() + LONGPRESS_TIMEOUT, EventHandler.Priority.IMMEDIATE); } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java index 7b0c20263cc298037502fbe780f1133d044c4154..b5f98ce050cac1d93d95658d7c14529d90ea25a9 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java @@ -377,6 +377,8 @@ public class ScaleGestureDetector { /** * Return whether the quick scale gesture, in which the user performs a double tap followed by a * swipe, should perform scaling. {@see #setQuickScaleEnabled(boolean)}. + * + * @return boolean */ public boolean isQuickScaleEnabled() { return mQuickScaleEnabled; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java index 78b0474df34a90dbae151b28591b8e6920057ea3..267435ffca44d6af7a3d5bcf231dc5473bf2eab8 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java @@ -24,14 +24,61 @@ public class VelocityTracker { velocityDetector.addEvent(touchEvent); } + /** + * getXVelocity + * + * @param velocityDetector + * @return float + */ private float getXVelocity(VelocityDetector velocityDetector) { return velocityDetector.getHorizontalVelocity(); } + /** + * getXVelocity + * + * @return float + */ + public float getXVelocity() { + return getXVelocity(mActivePointerId); + } + + /** + * getXVelocity + * + * @param id + * @return float + */ + public float getXVelocity(int id) { + VelocityDetector vd = mMap.get(id, null); + if (vd == null) { + return 0; + } + return getXVelocityWithScale(vd); + } + private float getYVelocity(VelocityDetector velocityDetector) { return velocityDetector.getVerticalVelocity(); } + public float getYVelocity() { + return getYVelocity(mActivePointerId); + } + + /** + * getYVelocity + * + * @param id + * @return float + */ + public float getYVelocity(int id) { + VelocityDetector vd = mMap.get(id, null); + if (vd == null) { + return 0; + } + return getYVelocityWithScale(vd); + } + /** * VelocityTracker */ @@ -118,41 +165,6 @@ public class VelocityTracker { } } - public float getXVelocity() { - return getXVelocity(mActivePointerId); - } - - public float getYVelocity() { - return getYVelocity(mActivePointerId); - } - - /** - * getXVelocity - * - * @param id - * @return - */ - public float getXVelocity(int id) { - VelocityDetector vd = mMap.get(id, null); - if (vd == null) { - return 0; - } - return getXVelocityWithScale(vd); - } - - /** - * getYVelocity - * - * @param id - * @return - */ - public float getYVelocity(int id) { - VelocityDetector vd = mMap.get(id, null); - if (vd == null) { - return 0; - } - return getYVelocityWithScale(vd); - } /** * clear diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java index d333a9a488a6170416eb502635ef4283ed935460..d392ebf11113a5fb9f910328afdf397f9ba2922d 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java @@ -73,6 +73,8 @@ public class EntrySet { /** * 添加一个 entry 到尾部 + * + * @param entry entry */ public void addEntry(Entry entry) { entries.add(entry); @@ -80,6 +82,8 @@ public class EntrySet { /** * 添加一组 entry 到尾部 + * + * @param entries entry */ public void addEntries(List entries) { this.entries.addAll(entries); @@ -87,6 +91,8 @@ public class EntrySet { /** * 添加一个 entry 到头部 + * + * @param entry entry */ public void insertFirst(Entry entry) { entries.add(0, entry); @@ -94,6 +100,8 @@ public class EntrySet { /** * 添加一组 entry 到头部 + * + * @param entries entry */ public void insertFirst(List entries) { this.entries.addAll(0, entries); diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/StockDataTest.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/StockDataTest.java index 1bb370e298f9bbb027e47aa6e39f6b770775d5d7..08b263a37ee2a352c3b66b0891ef1be35ce2275c 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/StockDataTest.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/StockDataTest.java @@ -37,6 +37,7 @@ public class StockDataTest { /** * parseKLineData + * * @param data * @return */ @@ -63,8 +64,9 @@ public class StockDataTest { /** * parseTimeLine - * @param data - * @return + * + * @param data data + * @return EntrySet */ public static EntrySet parseTimeLine(String data) { final EntrySet entrySet = new EntrySet(); diff --git a/ikvStockChart/src/test/java/com/wordplat/ikvstockchart/ExampleTest.java b/ikvStockChart/src/test/java/com/wordplat/ikvstockchart/ExampleTest.java index 77f3676360a4a1a25e518bbc045525dee7a1418b..5f463f133db165d73b036359f99b1c97ed7bf8b5 100644 --- a/ikvStockChart/src/test/java/com/wordplat/ikvstockchart/ExampleTest.java +++ b/ikvStockChart/src/test/java/com/wordplat/ikvstockchart/ExampleTest.java @@ -1,9 +1,90 @@ package com.wordplat.ikvstockchart; + +import com.wordplat.ikvstockchart.entry.Entry; +import ohos.multimodalinput.event.TouchEvent; import org.junit.Test; +import static org.mockito.Mockito.mock; + public class ExampleTest { + private final InteractiveKLineView lineView = mock(InteractiveKLineView.class); + @Test - public void onStart() { + public void setKLineHandler() { + lineView.setKLineHandler(new KLineHandler() { + @Override + public void onLeftRefresh() { + + } + + @Override + public void onRightRefresh() { + + } + + @Override + public void onSingleTap(TouchEvent e, float x, float y) { + + } + + @Override + public void onDoubleTap(TouchEvent e, float x, float y) { + + } + + @Override + public void onHighlight(Entry entry, int entryIndex, float x, float y) { + + } + + @Override + public void onCancelHighlight() { + + } + }); + } + + @Test + public void EnableRightRefresh() { + lineView.setEnableRightRefresh(true); } + + @Test + public void isRefreshing() { + lineView.isRefreshing(); + } + + @Test + public void isRefresh() { + lineView.isRefresh(); + } + + @Test + public void isHighlighting() { + lineView.isHighlighting(); + } + + @Test + public void refreshComplete() { + lineView.refreshComplete(true); + } + + @Test + public void unsubscribeVoiceEvents() { + lineView.unsubscribeVoiceEvents(); + + } + + @Test + public void isBoundToWindow() { + lineView.isBoundToWindow(); + } + + @Test + public void setOnTouchInterface() { + lineView.setOnTouchInterface((getAction, endUpY) -> false); + } + + }