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)