Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ScrollView 中高亮的位置判断有偏差 #87

Closed
snowjade opened this issue Nov 20, 2018 · 12 comments
Closed

ScrollView 中高亮的位置判断有偏差 #87

snowjade opened this issue Nov 20, 2018 · 12 comments

Comments

@snowjade
Copy link

snowjade commented Nov 20, 2018

image

看了几个关于 ScrollVIew 的issues,很多都是同样的问题。当高亮View在一个很长的LinearLayout的底部并且该ScrollView已经滚动到底部时,高亮View相对于LinearLayout的top是 比如是2000,LinearLayout相对ScrollView的top应该是 -1500时 结果却一直是0. 通过getHitRect拿到的LinearLayout相对ScrollView的top永远是0,不管实际滚动了多少。

@snowjade
Copy link
Author

@huburt-Hu 直接关闭的意思是?

@huburt-Hu
Copy link
Owner

v2.4.3版本已修复这个问题

@huburt-Hu
Copy link
Owner

感谢您的提出~

@snowjade
Copy link
Author

@huburt-Hu 好的,你太棒了!

@zhangshuqi
Copy link

V2.4.3 并未解决此问题

@zhangshuqi
Copy link

我未滑动到底部,只是滑动到HighLightView 即展示guide, guide 高亮位置显示在底部

@huburt-Hu
Copy link
Owner

@zhangshuqi 能把你判断的代码贴给我嘛,我测试下

@zhangshuqi
Copy link

var scrollBounds = Rect()
scrollView.getHitRect(scrollBounds);
if (highLightView .getLocalVisibleRect(scrollBounds)) {
//highLightView 显示
}

@zhangshuqi
Copy link

另外 是否可以考虑开放设置高亮部分UI自定义呢?

@huburt-Hu
Copy link
Owner

你这种判断方式有问题,getLocalVisibleRect方法是只要highLightView在scrollView的可视区域scrollBounds中出现了1个像素,就返回true。所以第一次满足条件的时候highLightView只在底部出现了一点点,这时候获取到的高亮位置就是在底部,而获取高亮位置的getLocationInView只在第一次获取一次,所以你后面重复show还是高亮在底部。
解决思路是修改引导层弹出时机——判断highLightView已经全部进入屏幕时。

@huburt-Hu
Copy link
Owner

@zhangshuqi 自定义高亮UI可以参见我的demo设置anchor那块代码:

HighlightOptions options = new HighlightOptions.Builder()
                        .setOnHighlightDrewListener(new OnHighlightDrewListener() {
                            @Override
                            public void onHighlightDrew(Canvas canvas, RectF rectF) {
                                Paint paint = new Paint();
                                paint.setColor(Color.WHITE);
                                paint.setStyle(Paint.Style.STROKE);
                                paint.setStrokeWidth(10);
                                paint.setPathEffect(new DashPathEffect(new float[]{20, 20}, 0));
                                canvas.drawCircle(rectF.centerX(), rectF.centerY(), rectF.width() / 2 + 10, paint);
                            }
                        })
                        .build();

复写onHighlightDrew方法实现自定义绘制。

@zhangshuqi
Copy link

我在highLightView完全进入屏幕之时show 同样出现此问题,我的判断规则是,当highLightView 的下一个view展示时show highLightView . 2.4.3 的代码 似乎跟您 guide lib 里面的代码不一致 您可以查看一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants