Giter Club home page Giter Club logo

patternlocker's People

Contributors

ihsg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

patternlocker's Issues

防止1 3连接跳过2以及3 9连接跳过5

private void updateHitState(MotionEvent event) {
final float x = event.getX();
final float y = event.getY();
for (CellBean c : this.cellBeanList) {
if (!c.isHit && c.of(x, y)) {
if (hitList.size() > 0) {
CellBean lastHit = null;
for (int i = 0; i < cellBeanList.size(); i++) {
if (cellBeanList.get(i).id == hitList.get(hitList.size() - 1)) {
lastHit = cellBeanList.get(i);
break;
}
}
if (lastHit != null) {
if (Math.abs(c.x - lastHit.x) == Math.abs(c.y - lastHit.y)) {
if (lastHit.x > c.x) {
for (CellBean c1 : this.cellBeanList) {
if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, c.y + (lastHit.y - c.y) / 2)) {
c1.isHit = true;
this.hitList.add(c1.id);
}
}
} else {
for (CellBean c1 : this.cellBeanList) {
if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, lastHit.y + (c.y - lastHit.y) / 2)) {
c1.isHit = true;
this.hitList.add(c1.id);
}
}
}
} else if (Math.abs(c.x - lastHit.x) > Math.abs(c.y - lastHit.y)) {
if (lastHit.x > c.x) {
//处理斜线 2-7 2-9这种
if (c.y == lastHit.y) {
for (CellBean c1 : this.cellBeanList) {
if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, c.y)) {
c1.isHit = true;
this.hitList.add(c1.id);
}
}
} else if (lastHit.y > c.y) {
for (CellBean c1 : this.cellBeanList) {
if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, c.y + (lastHit.y - c.y) / 2)) {
c1.isHit = true;
this.hitList.add(c1.id);
}
}
} else {
for (CellBean c1 : this.cellBeanList) {
if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, lastHit.y + (c.y - lastHit.y) / 2)) {
c1.isHit = true;
this.hitList.add(c1.id);
}
}
}

                        } else {
                            if (c.y == lastHit.y) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, c.y)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else if (lastHit.y > c.y) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, c.y + (lastHit.y - c.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, lastHit.y + (c.y - lastHit.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            }
                        }
                    } else {
                        if (lastHit.y > c.y) {
                            if (lastHit.x == c.x) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(c.x, c.y + (lastHit.y - c.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else if (lastHit.x > c.x) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, c.y + (lastHit.y - c.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, c.y + (lastHit.y - c.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            }

                        } else {
                            if (lastHit.x == c.x) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(c.x, lastHit.y + (c.y - lastHit.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else if (lastHit.x > c.x) {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(c.x + (lastHit.x - c.x) / 2, lastHit.y + (c.y - lastHit.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            } else {
                                for (CellBean c1 : this.cellBeanList) {
                                    if (!c1.isHit && c1.of(lastHit.x + (c.x - lastHit.x) / 2, lastHit.y + (c.y - lastHit.y) / 2)) {
                                        c1.isHit = true;
                                        this.hitList.add(c1.id);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            c.isHit = true;
            this.hitList.add(c.id);
        }
    }
}

集成到工程中的时候报错

gradle 进行sync的时候报错了

Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.github.ihsg:PatternLocker:2.1.0.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support.test:runner:1.0.2.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support.test.espresso:espresso-core:3.0.2.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:multidex-instrumentation:1.0.2.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:appcompat-v7:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:design:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:multidex:1.0.3.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support.constraint:constraint-layout:1.1.2.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve androidx.core:core-ktx:0.3.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.github.ihsg:PatternLocker:2.1.0.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:appcompat-v7:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:appcompat-v7:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:appcompat-v7:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.android.support:appcompat-v7:27.1.1.
Open File
Show Details


Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.github.ihsg:PatternLocker:2.1.0.
Open File
Show Details


Unable to resolve dependency for ':app@release/compileClasspath': Could not resolve com.github.ihsg:PatternLocker:2.1.0.
Open File
Show Details


Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not resolve com.github.ihsg:PatternLocker:2.1.0.
Open File
Show Details

空指针了

java.lang.NullPointerException
Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

1 com.github.ihsg.patternlocker.PatternLockerView.updateHitState(PatternLockerView.java:340)

2 com.github.ihsg.patternlocker.PatternLockerView.handleActionDown(PatternLockerView.java:296)
3 com.github.ihsg.patternlocker.PatternLockerView.onTouchEvent(PatternLockerView.java:212)
4 android.view.View.dispatchTouchEvent(View.java:11843)
5 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
6 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
7 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
8 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
9 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
10 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
11 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
12 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
13 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
14 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
15 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2981)
16 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2611)
17 com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:552)
18 com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1959)
19 android.app.Activity.dispatchTouchEvent(Activity.java:3526)
20 android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
21 com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:505)
22 android.view.View.dispatchPointerEvent(View.java:12082)
23 android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5325)
24 android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5109)
25 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4623)
26 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4676)
27 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4642)
28 android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4769)
29 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4650)
30 android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4826)
31 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4623)
32 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4676)
33 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4642)
34 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4650)
35 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4623)
36 android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7222)
37 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7196)
38 android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7157)
39 android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7379)
40 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:193)
41 android.os.MessageQueue.nativePollOnce(Native Method)
42 android.os.MessageQueue.next(MessageQueue.java:379)
43 android.os.Looper.loop(Looper.java:144)
44 android.app.ActivityThread.main(ActivityThread.java:7383)
45 java.lang.reflect.Method.invoke(Native Method)
46 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
47 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

遍历设置选中时 cellBeanList 为空了 暂未复现

java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at com.github.ihsg.patternlocker.PatternLockerView.updateHitState(PatternLockerView.java:340) at com.github.ihsg.patternlocker.PatternLockerView.handleActionDown(PatternLockerView.java:296) at com.github.ihsg.patternlocker.PatternLockerView.onTouchEvent(PatternLockerView.java:212) at android.view.View.dispatchTouchEvent(View.java:11788) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:549) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1953) at android.app.Activity.dispatchTouchEvent(Activity.java:3548) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:502) at android.view.View.dispatchPointerEvent(View.java:12027) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5278) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5067) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4634) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4600) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4727) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4608) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4784) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4634) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4600) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4608) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7169) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7143) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7104) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7325) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:379) at android.os.Looper.loop(Looper.java:144) at android.app.ActivityThread.main(ActivityThread.java:7425) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
设备机型:BAC-AL00
系统版本:8.0.0

有人遇到过吗?编译APK时BUILD FAILED

连接设备测试没问题,但生成APK时抛异常:
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/github/ihsg/patternlocker/Config.class

依赖路径出错

compile 'com.github.ihsg:PatternLock:2.0.0'失败
应该是compile 'com.github.ihsg:PatternLocker:2.0.0'

How to hide drawing lines?

I want to turn on the hidden gesture function, just like many mobile phones do. How to realize it, thank you, IHSG!

不配置kotlin环境,Java用户解决的一些办法。

1、在项目的build.gradle目录下添加kotlin版本
ext {
kotlinVersion = '1.3.11'
}
按要求添加
maven { url "https://jitpack.io" }
2、在app的build.gradle目录下添加
dependencies {
...
implementation 'com.github.ihsg:PatternLocker:2.4.5' //使用开源密码锁
runtimeOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
...
}
3、在app的build.gradle目录下添加
configurations {
cleanedAnnotations
compile.exclude group: 'org.jetbrains' , module:'annotations'
}
这里是我碰见的错误
Error while merging dex archives
Error: Program type already present: org.intellij.lang.annotations.JdkConstants$PatternFlags
利用网上资料,在最下面添加configurations就好了。

如果有遇见相同问题的朋友,可以试试,特此记录一下。

manifest冲突,Didn't find class "kotlin.reflect.KProperty"

在用java代码中引用 implementation 'com.github.ihsg:PatternLocker:2.4.0'遇到2个问题

  1. 结果编译的时候报manifest冲突,lib中的manifest最好是空的。
  2. 同时运行的时候报出 Didn't find class "kotlin.reflect.KProperty",不知道该如何解决。

注:我是java使用者,对kotlin中的问题不太熟悉。

手势连接中间点不会自动连接

根据运行项目进行测试发现,如果你从第一个点滑动的移动的时候不经过第二点范围,滑动到第三点后,中间点没有自动添加连接上,这个功能和自带的滑动手势有区别,请问怎么样能添加或者提供实现的原理吗?

重绘密码功能

当用户第一次绘制密码的时候,需要重置功能,这个能否直接集成到框架中呢?

        //1. draw first time
        if (TextUtils.isEmpty(this.tmpPwd)) {
            this.tmpPwd = convert2String(hitList);
            this.message = getReDrawMsg();
            this.isOk = true;
            if (null != listener) listener.onFirstSet();
            return;
        }

请问显示和异常轨迹能不能在同一个界面同事切换?

同一个view:

使用下面的代码试了好像不行呀 哈哈,求指点

 private void _initPLV(boolean isShowTailsFlag) {
        if (isShowTailsFlag) {
            patternLockerView.setLinkedLineView(new DefaultLockerLinkedLineView());
            mGestureTrailSwitch.setOpened(true);
        } else {
            // 隐藏手势轨迹
            patternLockerView.setLinkedLineView(null);
            mGestureTrailSwitch.setOpened(false);
        }
        patternLockerView.build();
    }

PatternIndicatorView 的颜色不能改变

PatternIndicatorView的颜色无论是java调用 mPtnIndicator.setNormalColor()还是xml配置 app:piv_color="@color/fontView"或者 app:plv_color="@color/fontView",都不能生效,始终是蓝色的

cellBeanList 最好使用懒加载,不然会产生未初始化问题

kotlin.UninitializedPropertyAccessException: lateinit property cellBeanList has not been initialized at com.github.ihsg.patternlocker.PatternLockerView.updateHitState(PatternLockerView.kt:270) at com.github.ihsg.patternlocker.PatternLockerView.handleActionDown(PatternLockerView.kt:225) at com.github.ihsg.patternlocker.PatternLockerView.onTouchEvent(PatternLockerView.kt:145)

闪退

只设置了布局,进页面直接闪退,日志不报啥错

一个闪退 UninitializedPropertyAccessException

#5204 kotlin.UninitializedPropertyAccessException
lateinit property cellBeanList has not been initialized
com.github.ihsg.patternlocker.PatternLockerView.updateHitState(PatternLockerView.kt:272)

机型信息:
OPPO PBAM00 33.33%,
三星 SM G9550 33.33%,
OPPO PBBT00 33.33%,
系统版本 9占66.67% ,系统版本 8.1.0 占33.33%

宽高

可以提供设置圆圈大小的api吗

1564481586(1)

bug数组下标越界

在三星s4的手机上面会报错,系统5.0.1
Invalid index 1122041856, size is 9

com.github.ihsg.patternlocker.h.a(DefaultLockerLinkedLineView.java:70)

`

1 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)

2 java.util.ArrayList.get(ArrayList.java:308)
3 com.github.ihsg.patternlocker.h.a(DefaultLockerLinkedLineView.java:70)
4 com.github.ihsg.patternlocker.PatternLockerView.a(PatternLockerView.java:261)
5 com.github.ihsg.patternlocker.PatternLockerView.onDraw(PatternLockerView.java:199)
6 android.view.View.draw(View.java:16219)
7 android.view.View.updateDisplayListIfDirty(View.java:15139)
8 android.view.View.getDisplayList(View.java:15162)
9 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
10 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
11 android.view.View.updateDisplayListIfDirty(View.java:15099)
12 android.view.View.getDisplayList(View.java:15162)
13 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
14 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
15 android.view.View.updateDisplayListIfDirty(View.java:15099)
16 android.view.View.getDisplayList(View.java:15162)
17 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
18 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
19 android.view.View.updateDisplayListIfDirty(View.java:15099)
20 android.view.View.getDisplayList(View.java:15162)
21 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
22 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
23 android.view.View.updateDisplayListIfDirty(View.java:15099)
24 android.view.View.getDisplayList(View.java:15162)
25 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
26 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
27 android.view.View.updateDisplayListIfDirty(View.java:15099)
28 android.view.View.getDisplayList(View.java:15162)
29 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
30 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
31 android.view.View.updateDisplayListIfDirty(View.java:15099)
32 android.view.View.getDisplayList(View.java:15162)
33 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
34 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
35 android.view.View.updateDisplayListIfDirty(View.java:15099)
36 android.view.View.getDisplayList(View.java:15162)
37 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
38 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
39 android.view.View.updateDisplayListIfDirty(View.java:15099)
40 android.view.View.getDisplayList(View.java:15162)
41 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
42 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
43 android.view.View.updateDisplayListIfDirty(View.java:15099)
44 android.view.View.getDisplayList(View.java:15162)
45 android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3687)
46 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3666)
47 android.view.View.updateDisplayListIfDirty(View.java:15099)
48 android.view.View.getDisplayList(View.java:15162)
49 android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:275)
50 android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:281)
51 android.view.ThreadedRenderer.draw(ThreadedRenderer.java:320)
52 android.view.ViewRootImpl.draw(ViewRootImpl.java:2751)
53 android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2584)
54 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2176)
55 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
56 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
57 android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
58 android.view.Choreographer.doCallbacks(Choreographer.java:590)
59 android.view.Choreographer.doFrame(Choreographer.java:560)
60 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
61 android.os.Handler.handleCallback(Handler.java:739)
62 android.os.Handler.dispatchMessage(Handler.java:95)
63 android.os.Looper.loop(Looper.java:145)
64 android.app.ActivityThread.main(ActivityThread.java:5951)
65 java.lang.reflect.Method.invoke(Native Method)
66 java.lang.reflect.Method.invoke(Method.java:372)
67 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
68 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

`

请问手势绘制完成后,我怎样让绘制的数据不自动消失

我绘制完手势后,大概2-3秒后,绘制的手势会自动消失。请问我加一个确定按钮后,点击确定按钮前,要求手势不消失;点击按钮后,才让绘制手势消失,请问该怎么做?或者调用手势消失的方法时哪一个?同时不让他自动消失的方法时哪一个?谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.