本篇文章的相关内容需结合上文:从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决的方法


在说完了怎样解决ScrollView嵌套EditText的滑动事件冲突之后。我们接下来说一下怎样实现它们两者之间的联带滑动。什么是联带滑动呢,就是当EditText滑动究竟部的时候,这时就应该让外部的ScrollView跟着滑动,好让它们之间完毕连贯的滑动事件,就是我们这篇文章的目的。详细效果就像以下这样:

ScrollView嵌套EditText联带滑动的解决的方法

上图是一个GIF图片。所以有些卡顿的效果。实际上效果是很流畅的。那么实现这样的效果该怎么做呢?


我们知道,子View能够依据requestDisallowInterceptTouchEvent方法来请求是否同意其祖父布局拦截本次的触摸事件。那么,我们就有了初步的解决的方法。就是,在须要的时候,不要让祖父布局拦截事件,在不须要的时候,让它们拦截,这时。事件就会被交给祖父布局来处理,并会让ScrollView滑动起来。


上篇文章,我们已经对这一步做了主要的处理。假设你已经依照上文实现了的话,发现并没有依照想象中的那样实现本效果。那么是哪里出现了问题。是哪里还有问题吗?


细心的同学能够发现,我们在onScrollChanged方法中对到达顶部和底部时做了处理,同意祖父布局对事件进行拦截。

可是,假设做了调试的话。onScrollChanged方法调用之后onTouchEvent方法也调用了一次requestDisallowInterceptTouchEvent,并设置的參数还是true,也就是说,刚才在onScrollChanged方法中做的处理被取消了。

所以。这时我们须要加个标志。用于帮助onTouchEvent方法中的requestDisallowInterceptTouchEvent方法进行合理的调用。


So。我们的问题就攻克了。


只是还须要一些兴许工作,就是在dispatchTouchEvent推断时候有新一轮的事件被传递过来,这时。我们还须要将这个标志又一次初始化一下。


所有的实现代码例如以下:


代码,相比上篇文章进行了略微的改良。

看起来更加明白。


所以。上面就是我们经常看到的对不同View之间进行连贯性滑动的解决的方法。



PS:对于这样的事件类的调试,假设身边没有源代码能够调试的话。那么打印日志是一个好的解决的方法。


经过这两篇文章,相信你一定会触摸事件之间的关系有了更进一步的了解。

相关文章:

  • 2022-12-23
  • 2021-12-09
  • 2021-12-15
  • 2022-12-23
  • 2021-06-13
  • 2021-12-19
  • 2022-01-03
猜你喜欢
  • 2021-12-16
  • 2021-12-31
  • 2021-07-15
  • 2021-06-10
  • 2021-04-26
  • 2022-01-08
  • 2021-09-22
相关资源
相似解决方案