额,好吧,最近一直在做侧滑的事情,到目前为止一共是学了三种方法了,一个是直接加第三方开源框架SlidingMenu,第二给是用DrawerLayout,今天这个是用谷歌官方提供的在新的support-v4中添加了Widget  Drawer layout等侧滑效果,即ViewDragHelper,这里简单分享一下ViewDragHelper的实现方法。

  1. ViewDragHelper.Callback mCallback = new ViewDragHelper.Callback() {
  2. // c. 重写事件
  3.  
  4. // 1. 根据返回结果决定当前child是否可以拖拽
  5. // child 当前被拖拽的View
  6. // pointerId 区分多点触摸的id
  7. @Override
  8. public boolean tryCaptureView(View child, int pointerId) {
  9. Log.d(TAG, "tryCaptureView: " + child);
  10. return true;
  11. };
  12.  
  13. @Override
  14. public void onViewCaptured(View capturedChild, int activePointerId) {
  15. Log.d(TAG, "onViewCaptured: " + capturedChild);
  16. // 当capturedChild被捕获时,调用.
  17. super.onViewCaptured(capturedChild, activePointerId);
  18. }
  19.  
  20. @Override
  21. public int getViewHorizontalDragRange(View child) {
  22. // 返回拖拽的范围, 不对拖拽进行真正的限制. 仅仅决定了动画执行速度
  23. return mRange;
  24. }
  25.  
  26. // 2. 根据建议值 修正将要移动到的(横向)位置 (重要)
  27. // 此时没有发生真正的移动
  28. public int clampViewPositionHorizontal(View child, int left, int dx) {
  29. // child: 当前拖拽的View
  30. // left 新的位置的建议值, dx 位置变化量
  31. // left = oldLeft + dx;
  32. Log.d(TAG, "clampViewPositionHorizontal: "
  33. + "oldLeft: " + child.getLeft() + " dx: " + dx + " left: " +left);
  34.  
  35. if(child == mMainContent){
  36. left = fixLeft(left);
  37. }
  38. return left;
  39. }
  40.  
  41. // 3. 当View位置改变的时候, 处理要做的事情 (更新状态, 伴随动画, 重绘界面)
  42. // 此时,View已经发生了位置的改变
  43. @Override
  44. public void onViewPositionChanged(View changedView, int left, int top,
  45. int dx, int dy) {
  46. // changedView 改变位置的View
  47. // left 新的左边值
  48. // dx 水平方向变化量
  49. super.onViewPositionChanged(changedView, left, top, dx, dy);
  50. Log.d(TAG, "onViewPositionChanged: " + "left: " + left + " dx: " + dx);
  51.  
  52. int newLeft = left;
  53. if(changedView == mLeftContent){
  54. // 把当前变化量传递给mMainContent
  55. newLeft = mMainContent.getLeft() + dx;
  56. }
  57.  
  58. // 进行修正
  59. newLeft = fixLeft(newLeft);
  60.  
  61. if(changedView == mLeftContent) {
  62. // 当左面板移动之后, 再强制放回去.
  63. mLeftContent.layout(0, 0, 0 + mWidth, 0 + mHeight);
  64. mMainContent.layout(newLeft, 0, newLeft + mWidth, 0 + mHeight);
  65. }
  66. // 更新状态,执行动画
  67. dispatchDragEvent(newLeft);
  68.  
  69. // 为了兼容低版本, 每次修改值之后, 进行重绘
  70. invalidate();
  71. }
  72.  
  73. // 4. 当View被释放的时候, 处理的事情(执行动画)
  74. @Override
  75. public void onViewReleased(View releasedChild, float xvel, float yvel) {
  76. // View releasedChild 被释放的子View
  77. // float xvel 水平方向的速度, 向右为+
  78. // float yvel 竖直方向的速度, 向下为+
  79. Log.d(TAG, "onViewReleased: " + "xvel: " + xvel + " yvel: " + yvel);
  80. super.onViewReleased(releasedChild, xvel, yvel);
  81.  
  82. // 判断执行 关闭/开启
  83. // 先考虑所有开启的情况,剩下的就都是关闭的情况
  84. if(xvel == 0 && mMainContent.getLeft() > mRange / 2.0f){
  85. open();
  86. }else if (xvel > 0) {
  87. open();
  88. }else {
  89. close();
  90. }
  91.  
  92. }

侧滑面板(对viewGroup的自定义)的更多相关文章

  1. Android自定义ViewGroup(四、打造自己的布局容器)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51500304 本文出自:[openXu的博客] 目录: 简单实现水平排列效果 自定义Layo ...

  2. 我的面板我做主 -- 淘宝UWP中自定义Panel的实现

    在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...

  3. Android自定义ViewGroup,实现自动换行

    学习<Android开发艺术探索>中自定义ViewGroup章节 自定义ViewGroup总结的知识点 一.自定义ViewGroup中,onMeasure理解 onMeasure(int ...

  4. 自定义View(二)--继承自ViewGroup

    自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Dem ...

  5. Android -- ViewGroup源码分析+自定义

    1,我们前三篇博客了解了一下自定义View的基本方法和流程 从源码的角度一步步打造自己的TextView 深入了解自定义属性 onMeasure()源码分析 之前,我们只是学习过自定义View,其实自 ...

  6. 7.侧滑、ViewDragHelper、属性动画

    实现这样的效果: ## 侧滑面板(对ViewGroup的自定义)* 应用场景: 扩展主面板的功能* 功能实现: > 1. ViewDragHelper: Google2013年IO大会提出的, ...

  7. 自定义控件学习——仿qq侧滑栏

    效果 主要步骤: 1. 在xml布局里摆放内容. include    2. 在自定义ViewGroup里, 进行measure测量, layout布局    3. 响应用户的触摸事件    4. i ...

  8. 高级UI-DrawerLayout侧滑

    侧滑的方案有很多种,早期的开源SliddingMenu,以及后来的DrawerLayout以及NavigationView等都可实现侧滑效果,这里介绍的是DrawerLayout,下一节将介绍Navi ...

  9. 浅谈Excel开发:七 Excel 自定义任务窗体

    前面花了三篇文章讲解了Excel中的UDF函数,RTD函数和异步UDF函数,这些都是Excel开发中的重中之重.本文现在开始接着第二篇文章的菜单系统开始讲解Excel中可供开发的界面元素,本文要讲解的 ...

随机推荐

  1. [POJ 3243]Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  2. 【USACO Feb 2014】Cow Decathlon

    题目描述 约翰有 N 头奶牛,组成了一直队伍参加全能比赛.比赛一共有 N 项,每头奶牛必须参加一项比 赛,每项比赛也必须有一头奶牛参加.任何一头奶牛可以胜任任何一项比赛,但得分不一样.如果第 i 头奶 ...

  3. 2015 多校联赛 ——HDU5389(dp)

    Sample Input 4 3 9 1 1 2 6 3 9 1 2 3 3 5 2 3 1 1 1 1 1 9 9 9 1 2 3 4 5 6 7 8 9   Sample Output 1 0 1 ...

  4. 【集训第二天·翻水的老师】--ac自动机+splay树

    今天是第二天集训.(其实已经是第三天了,只是昨天并没有机会来写总结,现在补上) 上午大家心情都很愉快,因为老师讲了splay树和ac自动机. 但到了下午,我们的教练竟然跑出去耍了(excuse me? ...

  5. 【NOIP2013货车运输】

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  6. seq2seq-chatbot:200 行代码实现聊天机器人

    Chatbot in 200 lines of code CPU 跑不动 github:https://github.com/zsdonghao/seq2seq-chatbot 更多英文,中文聊天机器 ...

  7. js前端模块化(一) commonjs

    随着浏览器的发展,很多页面逻辑迁移到了客户端(表单验证等),JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组 ...

  8. UML总结4---UML九种图关系说明

    转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...

  9. HybridAPP开发框架Ionic+AngularJS+Cordova搭建

    Ionic Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lis ...

  10. 打造适合你的ABP(1)---- 完善日志系统

    最近使用Abp开发了一个项目,对abp有一个大概的了解,第一个小项目接近尾声,新的项目马上开始,针对开发第一个项目中发现的问题及不方便的地方,本人做一些修改,特此记录,请大家多多指正! 本人的开发环境 ...