最近在做项目过程中,涉及到对抽屉的应用,可使用slidingmenu,作用于drawerlayout相似,但是找了挺多好像没怎么看到对缩放和偏移的动画效果,于是用了google的drawerlayout.同时在项目中引入jar包nineoldandroids-2.4.0.jar 下载地址 http://dl.dbank.com/c04t71hcap
使用方法:
1、其中drawerlayout有setDrawerLockMode();可以设置是否支持手势滑动,其中
setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);//关闭手势滑动,有时候跟主界面滑动事件存在冲突时,可以将手势滑动关闭
mDrawer_layout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); //打开手势滑动
2、重写DrawerListener ,在onDrawerSlide方法中定义需要加载的动画效果,声明:在抽屉划出过程中会多次调用ondrawerslide方法,我在项目中用到的是nineoldandroids-2.4.0.jar架包,这是一个支持低版本动画效果的jar包,使用时直接导入到libs文件夹中即可。其中的ViewHelper可设置对应控件的
动画效果,代码如下:
private void initDrawerLayout()
{
mDrawerLayout = (DrawerLayout)findViewById(R.id.id_drawerLayout);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
mDrawerLayout.setScrimColor(0x00ffffff);
//新建drawerlistener
DrawerListener listener = new DrawerListener()
{
@Override
public void onDrawerStateChanged(int newState)
{}
@Override
public void onDrawerSlide(View drawerView, float slideOffset)
{
//offset 偏移值
View mContent = mDrawerLayout.getChildAt(0);
View mMenu = drawerView;
float scale = 1 - slideOffset;
float rightScale = 0.8f + scale * 0.2f;
if (drawerView.getTag().equals("RIGHT"))
{
ViewHelper.setTranslationX(mContent,-mMenu.getMeasuredWidth() * slideOffset);
// ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));
ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth());
ViewHelper.setPivotY(mContent,mContent.getMeasuredHeight() / 2);
mContent.invalidate();
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
}
@Override
public void onDrawerOpened(View drawerView)
{}
@Override
public void onDrawerClosed(View drawerView)
{
// ViewHelper.setTranslationX(mDrawerLayout.getChildAt(0),0);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
}
};
mDrawerLayout.setDrawerListener(listener);
}
3、在layout文件中使用drawerlayout,如果需要在左右两边都侧滑,那就定义两个fragment对应左右拉出菜单。同时定义左右菜单的宽度
最后提一下,由于在项目中使用drawerlayout的时候主界面在抽屉拉出后会有一个变暗的效果,如果想取消这种效果,可以添加mDrawerLayout.setScrimColor(0x00ffffff);这一句,将整个屏幕保持高亮。