参考博客:
[http://blog.csdn.net/lmj623565791/article/details/39257409](http://blog.csdn.net/lmj623565791/article/details/39257409)
[http://blog.csdn.net/lmj623565791/article/details/41531475/](http://blog.csdn.net/lmj623565791/article/details/41531475/)
DrawerLayout,鸿洋前辈的博客中其实写的已经很不错了,但是在**ViewHelper**的动画设置上,鸿洋前辈并未有过多的描述,对笔者此类没接触过**nineoldandroids**动画的新手来讲真的有点余言未尽的感觉,于是笔者下载了前辈的demo,然后自己又学习了一下。
学习内容:**(源码在文章结尾)**
1、简化了demo,仅仅留下了左边的抽屉。
2、添加了详细的注释。
3、学习了andorid studio添加library的方法。(添加nineoldandroids的library)
效果如图:
![](https://box.kancloud.cn/2016-03-01_56d551f15adee.jpg)
![](https://box.kancloud.cn/2016-03-01_56d551f188716.jpg)
MainAcitivity:
~~~
package com.example.drawerlayouttest;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.view.View;
import android.view.Window;
import com.nineoldandroids.view.ViewHelper;
public class MainActivity extends FragmentActivity
{
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.id_drawerLayout);
initEvents();
}
private void initEvents()
{
mDrawerLayout.setDrawerListener(new DrawerListener()
{
@Override
public void onDrawerStateChanged(int newState)
{
}
//当产生抽屉滑动时
@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
//获取mDrawerLayout中的第一个子布局,也就是布局中的Relativelayt
//获取抽屉的view
View mContent = mDrawerLayout.getChildAt(0);
View mMenu = drawerView;
float scale = 1 - slideOffset;
float rightScale = 0.8f + scale * 0.2f;
if (drawerView.getTag().equals("LEFT"))
{
float leftScale = 1 - 0.3f * scale;
//设置左边菜单滑动后的占据屏幕大小
ViewHelper.setScaleX(mMenu, leftScale);
ViewHelper.setScaleY(mMenu, leftScale);
//设置菜单透明度
ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));
//设置内容界面水平和垂直方向偏转量
//在滑动时内容界面的宽度为 屏幕宽度减去菜单界面所占宽度
ViewHelper.setTranslationX(mContent,
mMenu.getMeasuredWidth() * (1 - scale));
//设置内容界面操作无效(比如有button就会点击无效)
mContent.invalidate();
//设置右边菜单滑动后的占据屏幕大小
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
}
@Override
public void onDrawerOpened(View drawerView)
{
}
@Override
public void onDrawerClosed(View drawerView)
{
}
});
}
}
~~~
另外也是附上android studio中library的添加方法,**nineoldandroids的包需要按此方法手动添加**,如下图:
1、在file中找到 project stucture。
![](https://box.kancloud.cn/2016-03-01_56d551f1ab3bd.jpg)
2、打开后,选择 app->dependencies,点击加号添加library
![](https://box.kancloud.cn/2016-03-01_56d551f1ce7f1.jpg)
3、在 Choose Library Dependency的搜索框中搜索nineoldandroids,选择要添加的library。然后点击OK,添加完成。
![](https://box.kancloud.cn/2016-03-01_56d551f1ec831.jpg)
源码地址:[http://download.csdn.net/detail/double2hao/9396173](http://download.csdn.net/detail/double2hao/9396173)
- 前言
- android SharedPreference的简单使用(登陆界面记住密码)
- android 通知Notification的使用小实例(振动,灯光,声音)
- android调用摄像头拍照,从相册中选择照片并裁剪
- android从相册中获取图片出错,图片无法裁剪的问题
- android 后台定时提醒(Service,AlarmManager的使用)
- android如何让后台服务service不被杀死(设置前台服务)
- android修改控件外观(使用drawable资源)
- android 自定义view的使用(最佳demo——返回标题栏)
- android viewpager+fragment做主界面(超容易理解的demo!)
- Fragment生命周期
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
- Android DrawerLayout侧滑菜单+nineoldandroids动画
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- Android应用开发-护眼提醒-总结篇