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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM