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

ViewDragHelper.Callback mCallback = new ViewDragHelper.Callback() {// c. 重写事件// 1. 根据返回结果决定当前child是否可以拖拽// child 当前被拖拽的View// pointerId 区分多点触摸的id@Overridepublic boolean tryCaptureView(View child, int pointerId) {Log.d(TAG, "tryCaptureView: " + child);return true;};@Overridepublic void onViewCaptured(View capturedChild, int activePointerId) {Log.d(TAG, "onViewCaptured: " + capturedChild);// 当capturedChild被捕获时,调用.super.onViewCaptured(capturedChild, activePointerId);}@Overridepublic int getViewHorizontalDragRange(View child) {// 返回拖拽的范围, 不对拖拽进行真正的限制. 仅仅决定了动画执行速度return mRange;}// 2. 根据建议值 修正将要移动到的(横向)位置   (重要)// 此时没有发生真正的移动public int clampViewPositionHorizontal(View child, int left, int dx) {// child: 当前拖拽的View// left 新的位置的建议值, dx 位置变化量// left = oldLeft + dx;Log.d(TAG, "clampViewPositionHorizontal: " + "oldLeft: " + child.getLeft() + " dx: " + dx + " left: " +left);if(child == mMainContent){left = fixLeft(left);}return left;}// 3. 当View位置改变的时候, 处理要做的事情 (更新状态, 伴随动画, 重绘界面)// 此时,View已经发生了位置的改变@Overridepublic void onViewPositionChanged(View changedView, int left, int top,int dx, int dy) {// changedView 改变位置的View// left 新的左边值// dx 水平方向变化量super.onViewPositionChanged(changedView, left, top, dx, dy);Log.d(TAG, "onViewPositionChanged: " + "left: " + left + " dx: " + dx);int newLeft = left;if(changedView == mLeftContent){// 把当前变化量传递给mMainContentnewLeft = mMainContent.getLeft() + dx;}// 进行修正newLeft = fixLeft(newLeft);if(changedView == mLeftContent) {// 当左面板移动之后, 再强制放回去.mLeftContent.layout(0, 0, 0 + mWidth, 0 + mHeight);mMainContent.layout(newLeft, 0, newLeft + mWidth, 0 + mHeight);}// 更新状态,执行动画dispatchDragEvent(newLeft);// 为了兼容低版本, 每次修改值之后, 进行重绘invalidate();}// 4. 当View被释放的时候, 处理的事情(执行动画)@Overridepublic void onViewReleased(View releasedChild, float xvel, float yvel) {// View releasedChild 被释放的子View // float xvel 水平方向的速度, 向右为+// float yvel 竖直方向的速度, 向下为+Log.d(TAG, "onViewReleased: " + "xvel: " + xvel + " yvel: " + yvel);super.onViewReleased(releasedChild, xvel, yvel);// 判断执行 关闭/开启// 先考虑所有开启的情况,剩下的就都是关闭的情况if(xvel == 0 && mMainContent.getLeft() > mRange / 2.0f){open();}else if (xvel > 0) {open();}else {close();}}

侧滑面板(对viewGroup的自定义)相关推荐

  1. 1.仿QQ侧滑面板(对ViewGroup的自定义)

    侧滑面板(对ViewGroup的自定义) 应用场景: 扩展主面板的功能 功能实现:1.ViewDragHelper: Google2013年IO大会提出的,>解决界面控件拖拽移动问题. (v4包 ...

  2. 自定义控件:侧滑面板

    本篇博客讲解的是自定义View之侧滑面板,应用场景:QQ,知乎,效果图如下 1. 内容摘要 了解ViewDragHelper 的产生及解决的问题 掌握ViewDragHelper 的使用步骤 掌握属性 ...

  3. android开发之仿QQ拖拽界面效果(侧滑面板)

    仿QQ拖拽界面效果(侧滑面板),我们一般继承Layout,不会直接去继承ViewGroup,而是继承FrameLayout,为什么五大布局我们偏偏只继承FrameLayout呢? 第一,FrameLa ...

  4. QQ侧滑面板特效的实现

    ViewDragHelper的介绍   要实现和QQ5.0侧滑的特效,需要借助谷歌在2013年I/O大会上发布的ViewDragHelper类,提供这个类目的就是为了解决拖拽滑动问题.   使用v4包 ...

  5. 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)

    在Unity编辑器中,如果想要快捷的获取到Project面板中选中文件的路径,比如我们需要用Resources.Load的方式加载一个prefab,就需要知道这个prefab的路径,或者在自定义窗口中 ...

  6. 仿QQ侧滑面板(三)

    1.5 状态更新及事件回调 1.5.1 状态分析 1.5.2 事件回调分析 1.5.2 实现状态更新及事件回调 1.6 触摸优化 1.6.1 填充界面数据 1.6.2 主面板触摸优化 1.5 状态更新 ...

  7. 仿QQ侧滑面板(二)

    1.3 结束动画 1.3.1 跳转的结束动画 1.3.2 平滑的结束动画 1.4 伴随动画 1.4.1 分解伴随动画 1.4.2 实现伴随动画 1.3 结束动画 拖拽过程中当手指抬起时,需要实现一个打 ...

  8. 实践自定义UI-ViewGroup

    前面我们介绍了利用View和Android已有的控件RLF...(RelativeLayout.LinearLayout.FrameLayout...)实践自定义UI,感兴趣的小伙伴请移步: 实践自定 ...

  9. android 自定义viewgroup onmeasure,一篇文章搞懂Android 自定义Viewgroup的难点

    本文的目的 目的在于教会大家到底如何自定义viewgroup,自定义布局和自定义测量到底如何写.很多网上随便搜搜的概念和流程图这里不再过多描述了,建议大家看本文之前,先看看基本的自定义viewgrou ...

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

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

最新文章

  1. 图文详解并联机器人,你了解吗?
  2. 熊猫烧香源代码(转载)
  3. 基于python、虹软实现人脸检测,人脸识别
  4. 论数据集成技术的演变和发展 3/3
  5. C语言项目:推箱子大战
  6. 《恋上数据结构第1季》平衡二叉搜索树、AVL树
  7. 王道计算机考研——计算机组成原理笔记
  8. 粉红噪音测试软件,煲耳机方法二:粉红噪音
  9. 金蝶k3单据编码规则_金蝶K3各单据操作步骤
  10. python画椭圆形_如何绘制Python中的半椭圆?
  11. 工作多年想转行,有哪些正确的方法及技巧呢
  12. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]
  13. 通过PS把素色的旗袍换成青花瓷样式的旗袍
  14. 基于nodejs+vue社区互助平台- vscode项目
  15. sau交流学习社区第三方登陆github--oauth来实现用户登录
  16. golang websocket 一个语音聊天室
  17. Guitar Pro8.1最新中文版自动扒谱编写吉他谱 新功能讲解
  18. 【二】CC2541 阿莫BLE开发板 与 BTool软件的连接 以及 读写UUID
  19. Data Oriented Analysis Design
  20. 千江有水千江月,万里无云万里天

热门文章

  1. linux 使cpu使用率升高_linux性能优化
  2. cas 怎么过滤带pathvariable_过滤材料怎么摆?记住这个“公式”就好~
  3. python函数案例名片管理器_python实现名片管理器的示例代码
  4. 数据结构与算法-二叉树遍历
  5. 常用的linux命令-vim
  6. unity3d shader 自定义光照函数
  7. CentOS 升级现有PHP版本
  8. eclipse中自动生成javadoc文档的方法
  9. ARM64移动处理器解惑
  10. 2010网络最新单曲:《你一定要快乐》赵星理