Android 实现Scroll(滑动)的方法(二)——Andr
2019-03-20 本文已影响13人
辰_鱼
紧接上篇文章(Android实现Scroll(滑动)的方法(—))继续说一下实现滑动的方法。
⑥ViewDragHelper:支持着DrawerLayout和SlidingPaneLayout两个布局来实现侧边栏滑动效果。
案例:QQ滑动侧边栏(分析):
a.初始化ViewDragHelper:其通常定义在一个ViewGroup的内部,并通过其静态工厂方法进行初始化。
![](https://img.haomeiwen.com/i16526257/bea1316b1bb28005.png)
b.拦截事件:将事件传递给ViewDragHelper进行处理。
![](https://img.haomeiwen.com/i16526257/1281cb88948eb464.png)
c.处理computeScroll():ViewDragHelper内部也是通过Scroller实现平滑移动。
![](https://img.haomeiwen.com/i16526257/fcc64874e88f5fec.png)
d.处理回调Callback,在创建Callback时,IDE会重写tryCaptureView()方法,通过该方法,可以指定参数parentView中子View被移动。
![](https://img.haomeiwen.com/i16526257/58dcab485057f75e.png)
e.重写clampViewPositionVertical()、clampViewPositionHorizontal()方法。方法参数:int top(表示在垂直方向上child移动的距离),int dy(表示比较前一次的增量)
![](https://img.haomeiwen.com/i16526257/a74af164db8af1f6.png)
f.实现当手机离开屏幕后实现的操作:重写ViewDragHelper.Callback中系统提供的onViewReleased()方法。
![](https://img.haomeiwen.com/i16526257/303814b5c50c0d0c.png)
g.自定义ViewGroup,并在onFinishInflate()方法中按顺序将子View分别定义成MenuView和MainView,并在onSizeChanged()方法中获取View的宽度。
![](https://img.haomeiwen.com/i16526257/4aebb5bc6dbf9d7b.png)