紧接上篇文章 (Android 实现 Scroll(滑动) 的方法 (-)) 继续说一下实现滑动的方法.
6ViewDragHelper: 支持着 DrawerLayout 和 SlidingPaneLayout 两个布局来实现侧边栏滑动效果.
案例: QQ 滑动侧边栏(分析):
a. 初始化 ViewDragHelper: 其通常定义在一个 ViewGroup 的内部, 并通过其静态工厂方法进行初始化.
图 1
b. 拦截事件: 将事件传递给 ViewDragHelper 进行处理.
图 2
c. 处理 computeScroll():ViewDragHelper 内部也是通过 Scroller 实现平滑移动.
图 3
d. 处理回调 Callback, 在创建 Callback 时, IDE 会重写 tryCaptureView()方法, 通过该方法, 可以指定参数 parentView 中子 View 被移动.
图 4
e. 重写 clampViewPositionVertical(),clampViewPositionHorizontal()方法. 方法参数: int top(表示在垂直方向上 child 移动的距离),int dy(表示比较前一次的增量)
图 5
f. 实现当手机离开屏幕后实现的操作: 重写 ViewDragHelper.Callback 中系统提供的 onViewReleased()方法.
图 6
g. 自定义 ViewGroup, 并在 onFinishInflate()方法中按顺序将子 View 分别定义成 MenuView 和 MainView, 并在 onSizeChanged()方法中获取 View 的宽度.
图 7
主要代码, 到这里就结束了, 有需要完整代码的可以在评论区留言!!!
来源: http://www.jianshu.com/p/5308d7fccd60