參考博客:
[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)
效果如圖:

??
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。

2、打開后,選擇 app->dependencies,點擊加號添加library

3、在 Choose Library Dependency的搜索框中搜索nineoldandroids,選擇要添加的library。然后點擊OK,添加完成。

源碼地址:[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應用開發-護眼提醒-總結篇