這是一個輔助開發(fā)的UI庫,適用于某些特殊場景取胎,如固定范圍拖拽展哭、動畫湃窍、背景模糊效果等。直接看下效果圖會直觀點匪傍。
Screenshot
Drag模式您市,能夠拖拽指定的 View,并能和 ViewPager 進行聯(lián)動役衡,實現(xiàn)拖拽和 ScrollView 的平滑滾動茵休,帶有墜落回彈效果:
Animate模式,能夠?qū)崿F(xiàn)指定 View 退出進入的動畫效果手蝎,并能和ViewPager 進行聯(lián)動:
Blur模糊效果榕莺,包括局部模糊和全圖模糊兩種,實現(xiàn)偽動態(tài)模糊效果(之所以叫做偽動態(tài)模糊是因為該功能實現(xiàn)是通過背景模糊預(yù)處理再來動態(tài)加載實現(xiàn)的棵介,如果實時進行模糊處理容易造成界面卡頓钉鸯,所以該功能對靜態(tài)背景比較實用)。轉(zhuǎn)GIF圖有點模糊邮辽,大體看下效果唠雕。
外部拖拽,在屏幕上垂直滑動就可對視圖進行拖拽吨述,能夠設(shè)置主視圖滑動折疊
相關(guān)內(nèi)容
實現(xiàn)效果如上面的圖片所示及塘,這里簡單說明下用到的哪些東西。
拖拽滾動功能主要用到了?ViewDragHelper 和?ScrollerCompat 這兩個輔助類锐极,ViewDragHelper 內(nèi)部滾動也是由ScrollerCompat 實現(xiàn)笙僚;
動畫效果主要參考了代碼家的開源項目AndroidViewAnimations,引用了里面一部分動畫灵再,也有自定義動畫功能肋层,不過現(xiàn)在用起來可能還不夠人性化,可以參考下翎迁;
模糊效果用到了RenderScript這個輔助開發(fā)工具包栋猖,因為原生API需要17才能很好地使用模糊處理,這里使用了RenderScript支持包汪榔,所以在項目配置的時候需要進行該功能的支持蒲拉,詳見項目的使用;
對于模糊時的背景獲取和模糊處理參考了500px-android-blur這個項目痴腌,里面的設(shè)計想法值得學(xué)習(xí)一下雌团;
使用方法
依賴庫的方法看Github上說明。
在布局中引用:
如果 Content View 為 ViewPager士聪,通過以下方法來實現(xiàn)聯(lián)動效果:
[java]?view plain?copy
mDragLayout.interactWithViewPager(true);??
如果 Drag View 包含 ScrollView 或則 NestedScrollView锦援,通過以下方法來實現(xiàn)平滑滾動:
[java]?view plain?copy
mDragLayout.setAttachScrollView(mSvView);??
設(shè)置 Content View 的模糊效果:
[java]?view plain?copy
mDragLayout.setEnableBlur(true);????//?開啟模糊??
mDragLayout.setBlurFull(true);??//?設(shè)置全背景模糊,默認為局部模糊??
mDragLayout.updateBlurView();//?更新模糊背景??
控制 Drag View 的進入和退出:
[java]?view plain?copy
mDragLayout.scrollInScreen(int?duration);???//?Drag?模式??
mDragLayout.scrollOutScreen(int?duration);??//?Drag?模式??
mDragLayout.startInAnim();//?Animate?模式??
mDragLayout.startOutAnim();//?Animate?模式??
mDsLayout.setAnimatorMode(DragSlopLayout.FLIP_Y);//?設(shè)置動畫模式??
設(shè)置拖拽監(jiān)聽
[java]?view plain?copy
mDragLayout.setDragPositionListener(new?DragSlopLayout.OnDragPositionListener()?{??
@Override??
public?void?onDragPosition(int?visibleHeight,?float?percent,?boolean?isUp)?{??
//?TODO??
? ? ? ? ? ? }??
?});??
源碼
詳細的示例和源碼在這里: