drawerlayout的侧滑效果
google官方提供了drawerlayout实现侧滑抽屉。但是默认滑动效果只是显示抽屉菜单,然后content的内容不动,并打上阴影。
qq实现的侧滑效果比google的默认效果更有美感。当侧滑的时候,content的内容也跟着侧滑,两者滑动速度不一样,有一种层次感。
实现这种效果主要要监听滑动,drawerlayout提供了一个监听接口,但是不知道为什么不推荐使用。。。DrawerLayout.DrawerListener。
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
View mContent = drawerLayout.getChildAt(0);
View mMenu = drawerView;
float scale = 1 - slideOffset;
// float rightScale = 0.8f + scale * 0.2f;
//float leftScale = 1 - 0.3f * scale;
AnimatorSet set = new AnimatorSet();
set.playTogether(
// ObjectAnimator.ofFloat(mMenu, "ScaleX", leftScale),
// ObjectAnimator.ofFloat(mMenu, "ScaleY", leftScale),
// ObjectAnimator.ofFloat(mMenu, "Alpha", 0.6f + 0.4f * (1 - scale)),
// ObjectAnimator.ofFloat(mContent, "TranslationX", mMenu.getMeasuredWidth() * (1 - scale)),
ObjectAnimator.ofFloat(mContent, "TranslationX", mMenu.getMeasuredWidth() * (1 - scale))
// ObjectAnimator.ofFloat(mContent, "PivotX", 0),
// ObjectAnimator.ofFloat(mContent, "PivotY", mContent.getMeasuredHeight() / 2)
);
set.setDuration(0);
set.start();
}
监听接口里有这个方法onDrawerSlide(View drawerView, float slideOffset)
,看一下官方文档:
drawerView就是侧滑的view(抽屉),
slideOffset就是侧滑完成的进度(0~1)
接下来就是获取content对象,
View mContent = drawerLayout.getChildAt(0)
;获取了这俩个对象之后就可以通过属性动画来实现任何高大上的侧滑效果了。