1. 程式人生 > >Android開發之DrawerLayout的仿QQ側滑

Android開發之DrawerLayout的仿QQ側滑

在上一篇中我們提到了監聽DrawerLayout,今天就帶領大家解析DrawerLayout的監聽,定製屬於我們自己的DrawerLayout,然後完成QQ的側滑欄功能!

效果圖如下:


----------------------------------------分割線---------------------------------------------------------------

分析:如果想實現上述效果,需要內容部分跟著側滑欄的滑動而滑動,而預設效果是側滑欄遮住內容部分了,所以我們要想法拿到內容部分的View,然後再獲取到側滑的偏移量,然後根據重新計算的偏移量來動態平移內容部分的View,OK來程式碼實現一下:

drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                //滑動過程中不斷回撥 slideOffset:0~1
                View content = drawerLayout.getChildAt(0);
                View menu = drawerView;

                float scale = 1 - slideOffset;//1~0
                content.setTranslationX(menu.getMeasuredWidth() * (1 - scale));//0~width
            }

            @Override
            public void onDrawerOpened(View drawerView) {

            }

            @Override
            public void onDrawerClosed(View drawerView) {

            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });

在這裡再補充一句,監聽DrawerLayout還有另一個方法,是drawerLayout.setDrawerListener(new ...);在新版中這個方法已經過時,Google已經不推薦使用,這是給出的原因:This inspection reports where deprecated code is used in the specified inspection scope,翻譯下來就是:本檢驗報告,不合法的程式碼在指定的檢驗範圍。有興趣的童靴可以仔細翻看一下程式碼,這裡不做過多深究!

正好我們可以利用這一點做toolbar的動畫效果:

drawerLayout.setDrawerListener(drawerToggle);

----------------------------分割線----------------------------------------------------------------------

今天的任務比較簡單,下節課繼續講解DrawerLayout與其他控制元件的搭配使用!