关闭

Android V4包下DrawerLayout的学习及回顾

802人阅读 评论(0) 收藏 举报
分类:

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



0
0
查看评论

能否修改android supportv4包的源码?

能否修改android supportv4包的源码?能的话怎么修改?修改了之后怎么使用?
  • yunlv5007
  • yunlv5007
  • 2017-01-01 02:47
  • 406

初学ViewPager+Fragment的时候,app包中的fragment和v4包中的fragment的使用常常出现混乱,现在总结一下

app包中的fragment和v4包中的fragment的使用的区别,有需要的朋友可以参考下。 1、尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的。 2、android.support.v4.app.Fragment:可以...
  • ChinaFantastic
  • ChinaFantastic
  • 2015-12-22 09:55
  • 1462

使用design包的下的 DrawerLayout 抽屉--基础

如果使用的是 Android Studio ,则可以新建一个 DrawerActivity,系统默认的使用的是 ActionBar+Drawer,若需要使用系统的ActionBar,这样会更加方便。下面我们来整体分析下整个 Activity中的 java代码和 xml布局文件。 protected...
  • sinat_31820805
  • sinat_31820805
  • 2015-11-15 15:31
  • 335

使用ViewPager时,系统的Fragment 和支持包v4的Fragment二者传递对象不兼容

import android.app.Fragment;和import android.support.v4.app.Fragment;  两种Fragment的实现不一样,二者传递对象不兼容。 ViewPager时,需要使用了FragmentStatePagerAdapter,Fragm...
  • Buaaroid
  • Buaaroid
  • 2015-08-14 12:29
  • 3036

android日记:v4包的fragment和app包fragment的区别

初学android,遇到fragment的问题,记录下来! fragment有android.support.v4.app.fragment包和android.app.fragment之分,它俩的区别在于: android.app.fragment包是是3.0以后的系统才能使用的,也就是说3.0...
  • u013556258
  • u013556258
  • 2015-08-27 22:02
  • 2645

Android V4 包下的ViewDragHelper学习.

ViewDragHelper是Google最新V4包下一个算是比较隐藏的帮助类,不过在sdk--->simple-->ui.里面可以找到.也是最近才发现的这个 我的开发环境:Android Studio 1.2.1.1 编译SDK版本为:API 16 首先ViewDrag...
  • u010316858
  • u010316858
  • 2015-07-07 15:49
  • 840

app包中的fragment和v4包中的fragment的使用的区别

app包中的fragment和v4包中的fragment的使用的区别 1、尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的 2、android.support.v4.app.Fragment:可以兼容到1.6的版本, ...
  • a465456465
  • a465456465
  • 2013-08-27 19:49
  • 41861

关于app.FragmentManager和v4包的FragmentPagerAdapter冲突

这几天发现一个问题我用getFragmentManager()得到FragmentManager不能放到FragmentPagerAdapter里面去.因为FragmentPagerAdapter里面构造参数必须是v4包下的FragmentManager,而我activty里面getFragment...
  • yung7086
  • yung7086
  • 2015-08-16 15:13
  • 6539

android.support.v4.widget.DrawerLayout 侧滑样式

android.support.v4.widget.DrawerLayout  侧滑样式 布局 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"...
  • whq_sky
  • whq_sky
  • 2016-12-30 18:19
  • 2314

DrawerLayout+ToolBar官方API实现仿网易V4.4.4导航抽屉

网易V4.4.4 的导航抽屉长啥样,我想在此无需多说,没见过的自己去体验吧。 当时吸引我的是左边滑动,箭头图标变菜单图标动画,这个非常不错。殊不知,Android5.0以上官方提供的API便可轻松实现。5.0以下,需要添加android-support-v7-appcompat包支持。这个在SDk...
  • BigHulk
  • BigHulk
  • 2015-04-25 02:50
  • 1444
    个人资料
    • 访问:154392次
    • 积分:3002
    • 等级:
    • 排名:第13863名
    • 原创:41篇
    • 转载:2篇
    • 译文:1篇
    • 评论:38条
    博客专栏
    文章分类
    最新评论