侧滑面板(对viewGroup的自定义)
额,好吧,最近一直在做侧滑的事情,到目前为止一共是学了三种方法了,一个是直接加第三方开源框架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.仿QQ侧滑面板(对ViewGroup的自定义)
侧滑面板(对ViewGroup的自定义) 应用场景: 扩展主面板的功能 功能实现:1.ViewDragHelper: Google2013年IO大会提出的,>解决界面控件拖拽移动问题. (v4包 ...
- 自定义控件:侧滑面板
本篇博客讲解的是自定义View之侧滑面板,应用场景:QQ,知乎,效果图如下 1. 内容摘要 了解ViewDragHelper 的产生及解决的问题 掌握ViewDragHelper 的使用步骤 掌握属性 ...
- android开发之仿QQ拖拽界面效果(侧滑面板)
仿QQ拖拽界面效果(侧滑面板),我们一般继承Layout,不会直接去继承ViewGroup,而是继承FrameLayout,为什么五大布局我们偏偏只继承FrameLayout呢? 第一,FrameLa ...
- QQ侧滑面板特效的实现
ViewDragHelper的介绍 要实现和QQ5.0侧滑的特效,需要借助谷歌在2013年I/O大会上发布的ViewDragHelper类,提供这个类目的就是为了解决拖拽滑动问题. 使用v4包 ...
- 【Unity Editor编辑器】 代码获取project面板选中资源路径(自定义右键菜单)
在Unity编辑器中,如果想要快捷的获取到Project面板中选中文件的路径,比如我们需要用Resources.Load的方式加载一个prefab,就需要知道这个prefab的路径,或者在自定义窗口中 ...
- 仿QQ侧滑面板(三)
1.5 状态更新及事件回调 1.5.1 状态分析 1.5.2 事件回调分析 1.5.2 实现状态更新及事件回调 1.6 触摸优化 1.6.1 填充界面数据 1.6.2 主面板触摸优化 1.5 状态更新 ...
- 仿QQ侧滑面板(二)
1.3 结束动画 1.3.1 跳转的结束动画 1.3.2 平滑的结束动画 1.4 伴随动画 1.4.1 分解伴随动画 1.4.2 实现伴随动画 1.3 结束动画 拖拽过程中当手指抬起时,需要实现一个打 ...
- 实践自定义UI-ViewGroup
前面我们介绍了利用View和Android已有的控件RLF...(RelativeLayout.LinearLayout.FrameLayout...)实践自定义UI,感兴趣的小伙伴请移步: 实践自定 ...
- android 自定义viewgroup onmeasure,一篇文章搞懂Android 自定义Viewgroup的难点
本文的目的 目的在于教会大家到底如何自定义viewgroup,自定义布局和自定义测量到底如何写.很多网上随便搜搜的概念和流程图这里不再过多描述了,建议大家看本文之前,先看看基本的自定义viewgrou ...
- Android -- ViewGroup源码分析+自定义
1,我们前三篇博客了解了一下自定义View的基本方法和流程 从源码的角度一步步打造自己的TextView 深入了解自定义属性 onMeasure()源码分析 之前,我们只是学习过自定义View,其实自 ...
最新文章
- 图文详解并联机器人,你了解吗?
- 熊猫烧香源代码(转载)
- 基于python、虹软实现人脸检测,人脸识别
- 论数据集成技术的演变和发展 3/3
- C语言项目:推箱子大战
- 《恋上数据结构第1季》平衡二叉搜索树、AVL树
- 王道计算机考研——计算机组成原理笔记
- 粉红噪音测试软件,煲耳机方法二:粉红噪音
- 金蝶k3单据编码规则_金蝶K3各单据操作步骤
- python画椭圆形_如何绘制Python中的半椭圆?
- 工作多年想转行,有哪些正确的方法及技巧呢
- 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]
- 通过PS把素色的旗袍换成青花瓷样式的旗袍
- 基于nodejs+vue社区互助平台- vscode项目
- sau交流学习社区第三方登陆github--oauth来实现用户登录
- golang websocket 一个语音聊天室
- Guitar Pro8.1最新中文版自动扒谱编写吉他谱 新功能讲解
- 【二】CC2541 阿莫BLE开发板 与 BTool软件的连接 以及 读写UUID
- Data Oriented Analysis Design
- 千江有水千江月,万里无云万里天