Android開發之DrawerLayout的仿QQ側滑
阿新 • • 發佈:2019-01-07
在上一篇中我們提到了監聽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與其他控制元件的搭配使用!