Android V4包下DrawerLayout的学习及回顾

原创 2015年07月06日 22:02:15

好久没看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,默认是不加锁的,这样可以为开发者轻易控制是否拖动.



版权声明:本文为博主原创文章,未经博主允许不得转载。

DrawerLayout简单使用之实现侧滑菜单(来自于support V4包)

DrawerLayout 相当于一个自定义的容器(extens ViewGroup)可以看做是一个有侧滑效果的帧布局,扩展性相对于很强,分为两部分:   1)内容布局;   2)侧滑出来的菜单布局:设...

用V4包中的DrawerLayout实现下拉刷…

在V4包中有个android.support.v4.widget.DrawerLayout可以方便的实现下拉刷新和侧滑,其中下拉刷新是用Android系统自带的控件,很不好看。但还是可以看看效果。 首...

关于学习android中v4包中PagerAdapter实现引导页效果

刚进公司,菜鸟一只,今天给自己规定的任务是学习引导页的

Android实习札记(3)---Fragment用app包还是v4包解析

Android实习札记(3)---Fragment用app包还是v4包解析 1)问题简述 相信很多的朋友在调用Fragment都会遇到下面的情况: 这个时候问题来了....

Android 编译工具升级到24后遇到的坑之V4包的Fragment

android.support.v4.app.Fragment版本升到24及更高后,修复了一些fragment的bug,例如显示隐藏问题,但是又改了一部分逻辑,显示隐藏问题请看这篇文章 http://...
  • hnsugar
  • hnsugar
  • 2017年04月25日 17:23
  • 1435

Android利用V4包中的SwipeRefreshLayout实现上拉加载

前言 原来的Android SDK中并没有下拉刷新组件,但是这个组件确实绝大多数APP必备的一个部件。好在google在v4包中出了一个SwipeRefreshLayout,但是这个组件只支持下拉刷...

Android v4包下的PagerTitleStrip,ViewPager的页面标题

android.support.v4.view.PagerTitleStrip 将Page的Title分离出来的一个自定义View,这样可以灵活的设置title的样式、文本。 效果: ...

Android导入design.v4包,Fragment生命周期,静态/动态加载

工作内容: 1.Fragment类与Activity生命周期 2.Fragment的动态加载(重要)和静态加载 3.Fragment与ViewPager的联合使用 学习分享: 一、Fragment类...

Android基础:Eclipse关联V4包源码

有2种方法第一种:(比较简单) 1 在libs下创建文件:android-support-v4.jar.properties 2 文件内容是src = E:\Develop\adt-bund...

Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件

在v4包下,对应的v4Demo中也有相应的例子。 SwipeRefreshLayout 这只能有一个直接子View,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android V4包下DrawerLayout的学习及回顾
举报原因:
原因补充:

(最多只允许输入30个字)