Android V4包下DrawerLayout的学习及回顾
2015-07-06 22:02
429 查看
好久没看DrawerLayout.我记得去年刚开始学习Android的时候,Drawerlayout只是一个简单的带把手的一个抽屉,市面上很少用,貌似那时候的QQ管家就用了这个控件.今天突然翻出来,发现Google已经废弃掉了抽屉的把手了,个人也是不太喜欢把手的,因为遮挡了视图,[那时候手机屏幕还是很小的时候].刚才玩弄了一下,给大家分享一下.
我的开发环境是Android Studio 1.2.1.1
1.我采用API 16编译.强迫症啊.估计是我的第一个项目是这样做的开头是这样的学的,所以这样才会让我感觉很熟悉.要想低版本编译还是有点苦逼的体力活去做,至于怎么做可以看我上一篇博客.
2.首先在Layout_main.xml里面,创建阅读源码DrawerLayout是继承ViewGruop的,所以直接可以代替四大布局.我的代码大致如下.
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dl" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ff00"> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="content" /> <LinearLayout android:layout_width="240dp" android:layout_height="fill_parent" android:layout_gravity="left" android:background="#FF0000" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="fill_parent" android:clickable="true" android:onClick="test" android:text="@string/hello_world" /> </LinearLayout> </android.support.v4.widget.DrawerLayout>
为什么可以实现拖拽.?
通过翻看源码.原来是通过V4报下的
mLeftDragger = ViewDragHelper.create(this, TOUCH_SLOP_SENSITIVITY, mLeftCallback); mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); mLeftDragger.setMinVelocity(minVel);
也就是边缘拖动的.ViewDragHelper本身就是一个可以拖动的视图的帮助类,里面的CallBack可以帮助开发者实现任意VIew的拖动,而且代码逻辑非常简单,可以说Google都为开发者封装好了.抽空我会介绍一下ViewDragHelper的使用.
然后DrawerLayout类提供一些滑动的监听,在监听的过程中你可以添加自己的逻辑.
@Override // 滑动的时候回调.slideOffset是可以滚动的当前比例 public void onDrawerSlide(View drawerView, float slideOffset) { Log.d("Tanck", "onDrawerSlide"); } @Override // 打开回调 public void onDrawerOpened(View drawerView) { Log.d("Tanck", "onDrawerOpened"); } @Override // 关闭回调 public void onDrawerClosed(View drawerView) { Log.d("Tanck", "onDrawerClosed"); } @Override //状态改变 public void onDrawerStateChanged(int newState) { Log.d("Tanck", "onDrawerStateChanged"); }
还可以OpenDrawer,CloseDrawer等,其中还有Mode值得一提.因为ViewDragHelper拖拽的时候去判定了这个Mode,如果被加锁了,ViewDragHelper就不会去拦截OnTouch,默认是不加锁的,这样可以为开发者轻易控制是否拖动.
相关文章推荐
- Android Annotations框架 配置及使用(Windows 7 + Android Studio 1.2.1.1)
- Android中Service的理解与使用
- Updata Android SDK
- Android错误之HAX is not installed on the machine(MAC OS)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android 引用库项目,Debug 库项目
- Android 进阶学习:事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- Android 增强版百分比布局库 为了适配而扩展
- android 百分比控件的使用
- Android性能优化--Listview优化
- Android 进阶学习:Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- Android第一次项目-拨打电话
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- android 实践- 2015/07/06
- Android 进阶学习:Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android 中 View 的中的 DrawableState
- Android高手进阶篇3-自定义ListView实现底部View自动隐藏和消失的功能
- Android事件传递机制-View篇
- android事件拦截处理机制详解