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)