侧滑面板(对viewGroup的自定义)
额,好吧,最近一直在做侧滑的事情,到目前为止一共是学了三种方法了,一个是直接加第三方开源框架SlidingMenu,第二给是用DrawerLayout,今天这个是用谷歌官方提供的在新的support-v4中添加了Widget Drawer layout等侧滑效果,即ViewDragHelper,这里简单分享一下ViewDragHelper的实现方法。
- ViewDragHelper.Callback mCallback = new ViewDragHelper.Callback() {
- // c. 重写事件
- // 1. 根据返回结果决定当前child是否可以拖拽
- // child 当前被拖拽的View
- // pointerId 区分多点触摸的id
- @Override
- public boolean tryCaptureView(View child, int pointerId) {
- Log.d(TAG, "tryCaptureView: " + child);
- return true;
- };
- @Override
- public void onViewCaptured(View capturedChild, int activePointerId) {
- Log.d(TAG, "onViewCaptured: " + capturedChild);
- // 当capturedChild被捕获时,调用.
- super.onViewCaptured(capturedChild, activePointerId);
- }
- @Override
- public 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已经发生了位置的改变
- @Override
- public 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){
- // 把当前变化量传递给mMainContent
- newLeft = 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被释放的时候, 处理的事情(执行动画)
- @Override
- public 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的自定义)的更多相关文章
- Android自定义ViewGroup(四、打造自己的布局容器)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51500304 本文出自:[openXu的博客] 目录: 简单实现水平排列效果 自定义Layo ...
- 我的面板我做主 -- 淘宝UWP中自定义Panel的实现
在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...
- Android自定义ViewGroup,实现自动换行
学习<Android开发艺术探索>中自定义ViewGroup章节 自定义ViewGroup总结的知识点 一.自定义ViewGroup中,onMeasure理解 onMeasure(int ...
- 自定义View(二)--继承自ViewGroup
自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Dem ...
- Android -- ViewGroup源码分析+自定义
1,我们前三篇博客了解了一下自定义View的基本方法和流程 从源码的角度一步步打造自己的TextView 深入了解自定义属性 onMeasure()源码分析 之前,我们只是学习过自定义View,其实自 ...
- 7.侧滑、ViewDragHelper、属性动画
实现这样的效果: ## 侧滑面板(对ViewGroup的自定义)* 应用场景: 扩展主面板的功能* 功能实现: > 1. ViewDragHelper: Google2013年IO大会提出的, ...
- 自定义控件学习——仿qq侧滑栏
效果 主要步骤: 1. 在xml布局里摆放内容. include 2. 在自定义ViewGroup里, 进行measure测量, layout布局 3. 响应用户的触摸事件 4. i ...
- 高级UI-DrawerLayout侧滑
侧滑的方案有很多种,早期的开源SliddingMenu,以及后来的DrawerLayout以及NavigationView等都可实现侧滑效果,这里介绍的是DrawerLayout,下一节将介绍Navi ...
- 浅谈Excel开发:七 Excel 自定义任务窗体
前面花了三篇文章讲解了Excel中的UDF函数,RTD函数和异步UDF函数,这些都是Excel开发中的重中之重.本文现在开始接着第二篇文章的菜单系统开始讲解Excel中可供开发的界面元素,本文要讲解的 ...
随机推荐
- [POJ 3243]Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- 【USACO Feb 2014】Cow Decathlon
题目描述 约翰有 N 头奶牛,组成了一直队伍参加全能比赛.比赛一共有 N 项,每头奶牛必须参加一项比 赛,每项比赛也必须有一头奶牛参加.任何一头奶牛可以胜任任何一项比赛,但得分不一样.如果第 i 头奶 ...
- 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 ...
- 【集训第二天·翻水的老师】--ac自动机+splay树
今天是第二天集训.(其实已经是第三天了,只是昨天并没有机会来写总结,现在补上) 上午大家心情都很愉快,因为老师讲了splay树和ac自动机. 但到了下午,我们的教练竟然跑出去耍了(excuse me? ...
- 【NOIP2013货车运输】
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- seq2seq-chatbot:200 行代码实现聊天机器人
Chatbot in 200 lines of code CPU 跑不动 github:https://github.com/zsdonghao/seq2seq-chatbot 更多英文,中文聊天机器 ...
- js前端模块化(一) commonjs
随着浏览器的发展,很多页面逻辑迁移到了客户端(表单验证等),JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组 ...
- UML总结4---UML九种图关系说明
转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...
- HybridAPP开发框架Ionic+AngularJS+Cordova搭建
Ionic Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lis ...
- 打造适合你的ABP(1)---- 完善日志系统
最近使用Abp开发了一个项目,对abp有一个大概的了解,第一个小项目接近尾声,新的项目马上开始,针对开发第一个项目中发现的问题及不方便的地方,本人做一些修改,特此记录,请大家多多指正! 本人的开发环境 ...