nineoldandroid 详细使用并且实现drawerlayout侧滑动画

nineoldandroid.view.ViewHelpe是一个为了兼容3.0以下的一个动画开源库

相关函数解读:(第一个参数都为动画对象,第二个为动画属性值的变化表达式)

  ViewHelper.setTranslationX(,);//x方向平移

  ViewHelper.setTranslationY(,);

  ViewHelper.setScaleX(,);x方向变化大小

  ViewHelper.setScaleY(,);

  ViewHelper.setAlpha(,);透明度变化

  ViewHelper.setPivotY(,);大小变化x方向的中心

  ViewHelper.setPivotX(,);

例如在drawerlayout中通过监听drawerlayout的滑动来设置动画(这里的监听器开始设置成了set。。。已经过时,两者没什么使用上的区别,只是会判断一次是否为空)

mDrawerLayout.addDrawerListener(new DrawerListener()//设置抽提监听事件,添加监听器
        {
            public void onDrawerStateChanged(int newState)//状态监听
            {
            }

            public void onDrawerSlide(View drawerView, float slideOffset)//滑动监听
            {
                View mContent = mDrawerLayout.getChildAt(0);//返回抽屉布局中的索引为0的子view
                View mMenu = drawerView;
                float scale = 1 - slideOffset;//偏移量导致scale从1.0-0.0
                float rightScale = 0.8f + scale * 0.2f;//将内容区域从1.0-0.0转化为1.0-0.8

                if (drawerView.getTag().equals("LEFT"))
                {

                    float leftScale = 1 - 0.3f * scale;//0.7-1.0
                    ViewHelper.setScaleX(mMenu, leftScale);
                    ViewHelper.setScaleY(mMenu, leftScale);
                    ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));//开始这里设置成了这样,导致背景透明度有1.0-0.6
//                    ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * scale);
                    ViewHelper.setTranslationX(mContent,
                            mMenu.getMeasuredWidth() * (1 - scale));
                    ViewHelper.setPivotX(mContent, 0);
                    ViewHelper.setPivotY(mContent,
                            mContent.getMeasuredHeight() / 2);
                    mContent.invalidate();
                    ViewHelper.setScaleX(mContent, rightScale);
                    ViewHelper.setScaleY(mContent, rightScale);
                } else
                {
                    ViewHelper.setTranslationX(mContent,
                            -mMenu.getMeasuredWidth() * slideOffset);
                    //设置大小变化的中心
                    ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth());
                    ViewHelper.setPivotY(mContent,
                            mContent.getMeasuredHeight() / 2);
                    mContent.invalidate();
                    ViewHelper.setScaleX(mContent, rightScale);
                    ViewHelper.setScaleY(mContent, rightScale);
                }

            }

            public void onDrawerOpened(View drawerView)
            {
            }

            public void onDrawerClosed(View drawerView)
            {
                mDrawerLayout.setDrawerLockMode(
                        DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
            }
        });


关于滑动中动画属性的转化:

1、首先是内容区域的缩放比例计算:

我们准备让在菜单出现的过程中,让内容区域从1.0~0.8进行变化

float rightScale = 0.8f + scale * 0.2f; (scale 从1到0 )

2、菜单的缩放比例计算

菜单大概缩放变化是0.7~1.0

float leftScale = 1 - 0.3f * scale;

3、菜单的透明度比例:

我们设置为0.6~1.0;即:0.6f + 0.4f * (1 - scale)

原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5594295.html