精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一步一步教你150行代碼實現簡書滑動返回效果

移動開發
通過閱讀本文你能學習到: 1、ViewDragHelper的使用(如果你想學習自定義View,那么ViewDragHelper你絕對不能錯過) 2、好像也沒有什么了.... 這個效果,難度不大,會ViewDragHelper的同學應該10分鐘就能寫出來了吧~如果不會也沒關系~

今天帶大家實現簡書的滑動返回效果.

先看看效果圖:

最終效果圖.gif

因為沒有具體內容,也沒有簡書的圖片資源,所以稍微簡陋了點.
但是依然不妨礙我們的效果展示~

OK,接下來慣例,通過閱讀本文你能學習到:

  1. ViewDragHelper的使用(如果你想學習自定義View,那么ViewDragHelper你絕對不能錯過)
  2. 好像也沒有什么了....

這個效果,難度不大,會ViewDragHelper的同學應該10分鐘就能寫出來了吧~
如果不會也沒關系~

1. 我們自定義一個SwipeBackFrameLayout繼承自FrameLayout

1.1 因為看到左邊黃色的View是被遮住的,而另外一個View的寬度是MatchParent的,所以FrameLayout是不錯的選擇.
順便增加一個回調,通知activity去finish

  1. public void setCallback(Callback mCallback){ 
  2.     this.mCallback = mCallback; 
  3. private Callback mCallback; 
  4. public interface Callback{ 
  5.     void onShouldFinish(); 

1.2 Xml布局,非常簡單:

  1. <yifeiyuan.practice.practicedemos.drager.SwipeBackFrameLayout  
  2. xmlns:android="http://schemas.android.com/apk/res/android"     
  3. xmlns:tools="http://schemas.android.com/tools"     
  4. android:id="@+id/swipe_back" 
  5. android:layout_width="match_parent"     
  6. android:layout_height="match_parent"     
  7. tools:context="yifeiyuan.practice.practicedemos.drager.SwipeBackActivity"
  8.     <TextView 
  9.         android:layout_width="40dp"         
  10.         android:layout_height="match_parent"         
  11.         android:text="@string/hello_world" 
  12.         android:gravity="center" 
  13.         android:background="#ffff00" 
  14.         /> 
  15.     <View 
  16.         android:layout_width="match_parent"         
  17.         android:layout_height="match_parent" 
  18.         android:background="#ff00ff" 
  19.         /> 
  20. </yifeiyuan.practice.practicedemos.drager.SwipeBackFrameLayout> 

1.3 實例化一個ViewDragHelper

  1. //1f代表靈敏度  
  2. mDragHelper = ViewDragHelper.create(this, 1f,new ViewDragHelper.Callback() { 
  3.     @Override 
  4.     public boolean tryCaptureView(View child, int pointerId) { 
  5.         return false
  6.     } 
  7. //因為我們是從左向右滑動 所以設置EDGE_LEFT 
  8. mDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); 

1.4 在SwipeBackFrameLayout里實例化xml里的子View

  1. private View mDividerView; 
  2. private View mContentView; 
  3. @Override 
  4. protected void onFinishInflate() { 
  5.     super.onFinishInflate();  
  6.    mDividerView = getChildAt(0); 
  7.     mDividerView.setAlpha(0f); 
  8.     mContentView = getChildAt(1); 

1.5 讓ViewDragHelper處理touch事件

  1. @Override 
  2. public boolean onInterceptTouchEvent(MotionEvent ev) { 
  3.     return mDragHelper.shouldInterceptTouchEvent(ev); 
  4.  
  5. @Override 
  6. public boolean onTouchEvent(MotionEvent event) {     
  7.     mDragHelper.processTouchEvent(event); 
  8.     return true

1.6重寫ViewDragHelper的一些處理方法
已附上詳細注釋

  1. @Override 
  2. public void onEdgeTouched(int edgeFlags, int pointerId) {     
  3.     super.onEdgeTouched(edgeFlags, pointerId);  
  4.    //觸摸到左邊界的時候 我們capture住mContentView            
  5.     mDragHelper.captureChildView(mContentView, pointerId);  
  6. }             
  7. @Override             
  8. public int getViewHorizontalDragRange(View child) { 
  9.       return 1;       
  10.  
  11. @Override  
  12. public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { 
  13.      super.onViewPositionChanged(changedView, left, top, dx, dy); 
  14.      Log.d(TAG, "onViewPositionChanged() called with left = [" + left + "], top = [" + top + "], dx = [" + dx + "], dy = [" + dy + "]");  
  15.      //0.0 - 1.0 
  16.      //Notice 這邊可以給個接口回調出去,就可以做各種炫酷的效果了                      
  17.      float alpha = (float) (left*1.0/mDividerWidth);   
  18.      mDividerView.setAlpha(alpha);             
  19. }   
  20.      @Override 
  21.      public int clampViewPositionHorizontal(View child, int left, int dx) { 
  22. //                Log.d(TAG, "clampViewPositionHorizontal() called with  dx = [" + dx + "]"); 
  23.      // 計算left 我們的目標范圍是0-dividerwidth的寬度 
  24.      mLastdx = dx;  
  25.      int newLeft = Math.min(mDividerWidth, Math.max(left,0));                            
  26.      return newLeft;  
  27. }             
  28.      @Override             
  29.      public void onViewReleased(View releasedChild, float xvel, float yvel) {                 
  30.      //>0代表用戶想關閉                 
  31.      if (mLastdx>0){ 
  32.      // 還不到關閉條件,我們讓view滑動過去,再關閉                     
  33.      if (mDividerWidth != releasedChild.getLeft()) {     
  34.        mDragHelper.settleCapturedViewAt(mDividerWidth,releasedChild.getTop(); 
  35.        invalidate();  
  36. else {     
  37.      if (mCallback != null) {   
  38.           mCallback.onShouldFinish();   
  39.       }      
  40. }   
  41. }else{             
  42.         //用戶不想關閉 ,則滑動到最左邊 
  43.      if (mDividerWidth != 0) {    
  44.           mDragHelper.settleCapturedViewAt(0, releasedChild.getTop());   
  45.           invalidate();   
  46.      } 
  47. }             
  48. }             
  49.  
  50.      @Override             
  51.      public void onViewDragStateChanged(int state) {   
  52.               super.onViewDragStateChanged(state);  
  53. //滑動停止,并且到達了滑動的判斷條件 則回調關閉 
  54. if(mDragHelper.getViewDragState()==ViewDragHelper.STATE_IDLE&&mCallback != null&&mDividerWidth==mContentView.getLeft()&&mLastdx>0) {                     
  55. mCallback.onShouldFinish();  
  56.                } 
  57.             } 
  58.         }); 

1.7 增加對view滑動事件處理,對于以上mDividerWidth我們在onLayout里獲取

  1. private int mDividerWidth; 
  2. @Override 
  3. protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
  4.     super.onLayout(changed, left, top, right, bottom); 
  5.     mDividerWidth = mDividerView.getWidth(); 
  6. //Notice view 剛初始化的時候就會被調用一次 
  7.     @Override 
  8.     public void computeScroll() { 
  9.         super.computeScroll(); 
  10.       //        Log.d(TAG, "computeScroll() called with " + "");  
  11.     if (mDragHelper.continueSettling(true)) { 
  12.         invalidate(); 
  13.      } 

我們寫完自定義view后還需要自定義一下activity的退出動畫~

2.定義activity的finish動畫

2.1 在anim目錄下,創建兩個動畫xml:

  1. //no_anim 
  2. <alpha 
  3. android:duration="300"     
  4. xmlns:android="http://schemas.android.com/apk/res/android"     
  5. android:fromAlpha="1.0" 
  6. android:toAlpha="1.0" 
  7. ></alpha> 
  8.  
  9. //out_to_right 
  10. <translate     
  11. xmlns:android="http://schemas.android.com/apk/res/android"     
  12. android:duration="300"     
  13. android:fromXDelta="0%"     
  14. android:toXDelta="100%"     
  15. ></translate> 

2.2 在activity里設置callback監聽,并運用動畫

  1. mSwipeBack.setCallback(new SwipeBackFrameLayout.Callback() {     
  2.     @Override 
  3.     public void onShouldFinish() { 
  4.         finish(); 
  5.         overridePendingTransition(R.anim.no_anim, R.anim.out_to_right); 
  6.     } 
  7. }); 

好了!!~代碼量非常少!~就是這么簡單~

吐槽一下,簡書對代碼塊的支持太差了,代碼復制過來全是亂的!!
同學們還是去看源碼吧:

源碼在我的Github

責任編輯:倪明 來源: 簡書
相關推薦

2009-07-06 19:29:37

云計算私有云服務器虛擬化

2022-08-29 15:19:09

CSS煙花動畫

2018-03-07 15:24:41

PythonMySQL

2020-10-28 15:03:25

C+代碼開發

2009-12-17 08:57:28

Windows 7磁盤分區

2024-07-22 11:43:28

LVMPnetLab網絡

2011-06-07 16:03:48

匿名SQL Server

2024-12-02 14:48:30

Docker鏡像文件

2024-09-13 15:20:46

2025-04-08 09:30:00

SeataDocker分布式系統

2017-11-29 11:14:52

離線緩存URL協議緩存

2018-06-11 15:30:12

2013-03-18 16:09:27

JavaEEOpenfire

2017-12-25 11:50:57

LinuxArch Linux

2024-11-01 11:40:11

2009-12-18 16:27:43

Cisco路由器配置

2012-03-22 10:33:33

思杰XenDesktop

2017-09-28 09:40:36

圖像分類準確率

2022-09-30 15:37:19

Web網站服務器

2023-09-05 07:52:43

點贊
收藏

51CTO技術棧公眾號

国产97在线|日韩| 精品美女一区二区| 亚洲一区精彩视频| 99久久精品国产成人一区二区| 国产精品mv在线观看| 日韩精品视频观看| 国产三级国产精品国产专区50| 91黄色在线| 久久亚洲精华国产精华液| 91精品视频在线看| 99久久精品国产亚洲| 天天综合国产| 亚洲美女性生活视频| 久久久精品视频国产| 波多野结衣亚洲一二三| 亚洲人亚洲人成电影网站色| 精品国产一区二区三区四区vr| 一二三区免费视频| 亚洲激情网站| 久久五月情影视| 久久久久亚洲av无码专区桃色| 国产午夜亚洲精品一级在线| 色婷婷综合久色| 日韩精品一区二区在线视频| 成人高清免费观看mv| 99天天综合性| 91视频最新| 亚洲综合一区中| 欧美专区一区二区三区| 色综合91久久精品中文字幕| 一级二级黄色片| 视频福利一区| 精品国产精品网麻豆系列| 欧美精品 - 色网| 成人全视频免费观看在线看| 日韩欧美国产激情| 国产精品videossex国产高清| 国产在线日本| 91美女在线观看| 国产经品一区二区| a视频免费在线观看| 蜜桃视频在线一区| 国产精品99久久99久久久二8| 日韩毛片在线视频| 樱桃成人精品视频在线播放| 欧美成人在线免费视频| www.av成人| 国产精品传媒精东影业在线| 色综合影院在线| 日本美女bbw| 精品国产91乱码一区二区三区四区| 久久久久久av无码免费网站| 免费观看成人性生生活片| 亚洲成a天堂v人片| 免费网站在线观看视频| 亚洲男同gay网站| 亚洲色图另类专区| 97在线免费视频观看| 亚洲综合图区| 亚洲一本大道在线| 日韩成人三级视频| 美女av在线免费看| 色先锋资源久久综合| 成人小视频在线看| 国精产品一区一区三区四川| 欧美综合久久久| 丝袜制服一区二区三区| 精品国产美女a久久9999| 欧美在线播放高清精品| 精品亚洲一区二区三区四区| 午夜不卡一区| 日韩午夜在线观看视频| 国产精品99久久久精品无码| 精品国产一区二区三区不卡蜜臂| 亚洲国产一区自拍| 国产精品久久久久无码av色戒| 啄木系列成人av电影| 揄拍成人国产精品视频| 国产黄色小视频网站| 午夜精品av| 91av在线影院| 亚洲天堂视频在线播放| 国产自产2019最新不卡| 国产美女在线精品免费观看| 色久视频在线播放| 国产精品欧美久久久久一区二区| 一区二区三区精品国产| 怡红院在线播放| 欧美午夜无遮挡| av亚洲天堂网| 国产精品22p| 一区二区av在线| 久久久久久久久久网站| 国产欧美日韩综合一区在线播放| 国产精品美女网站| www.香蕉视频| 久久久不卡网国产精品二区| 99亚洲精品视频| 涩涩在线视频| 欧美一区二区视频在线观看2022| 中文字幕天堂网| av亚洲免费| 欧美激情视频网站| 夜夜躁日日躁狠狠久久av| 韩国成人福利片在线播放| 精品乱码一区二区三区| av在线二区| 亚洲成人精品在线观看| 91女神在线观看| 欧美成a人免费观看久久| 在线观看欧美日韩| 日韩人妻无码一区二区三区99| 全部av―极品视觉盛宴亚洲| 国产欧美日韩一区| аⅴ资源新版在线天堂| 亚洲成人在线网站| 国产一级片自拍| 啪啪激情综合网| 欧美超级免费视 在线| 日本中文字幕久久| 丁香桃色午夜亚洲一区二区三区| 天天人人精品| 性欧美xxx69hd高清| 日韩亚洲欧美中文三级| 久久精品色妇熟妇丰满人妻| 一本综合久久| 超碰97人人在线| 美女黄视频在线观看| 欧美亚洲在线| 91精品欧美福利在线观看| 中文国产在线观看| 视频国产一区| 日本久久久久久久久久久| 亚洲精品久久久久久久久久| 最新久久zyz资源站| 欧美黑人又粗又大又爽免费| 亚洲8888| 7777免费精品视频| 欧美天堂在线视频| 一区二区三区91| 亚洲第一区第二区第三区| 欧美日韩在线播放视频| 欧洲一区二区视频| 日本高清中文字幕二区在线| 精品久久久久久久久国产字幕| 国产精品19p| 欧美aⅴ99久久黑人专区| 成人国产精品久久久久久亚洲| av在线日韩国产精品| 欧美性大战久久久| 人人爽人人爽人人片| 视频一区在线视频| 日本不卡久久| 欧美不卡高清一区二区三区| 国产亚洲欧美日韩一区二区| 中文字幕一区二区人妻视频| 久久久久亚洲蜜桃| 蜜臀久久99精品久久久酒店新书 | 亚洲一区电影777| 日本黄色www| 欧美在线资源| 97人人模人人爽人人喊38tv| 污片视频在线免费观看| 日韩精品一区二区三区老鸭窝| 欧美三根一起进三p| 国产成人在线视频免费播放| 欧美国产视频一区| 美女一区二区在线观看| 2019中文字幕在线| 成人在线免费电影| 欧美美女一区二区在线观看| 永久免费看片视频教学| 福利一区二区在线| 天天夜碰日日摸日日澡性色av| 国产欧美日韩精品高清二区综合区| 国产成人久久精品| 久草中文在线| 亚洲成人激情在线观看| 性无码专区无码| 欧美国产一区二区在线观看 | 日本免费观看视| 久久色在线视频| 一路向西2在线观看| 欧美不卡高清| 免费看成人午夜电影| 四虎精品永久免费| 97视频在线观看视频免费视频| 国产福利电影在线| 欧美一区二区国产| 亚洲天堂av片| 亚洲欧洲国产日本综合| 亚洲图片综合网| 看国产成人h片视频| 日韩一级性生活片| jvid福利在线一区二区| 99超碰麻豆| 偷拍视频一区二区三区| 久久手机免费视频| 五月天婷婷激情网| 7878成人国产在线观看| 国产区在线观看视频| 国产精品久久久久7777按摩| 艳妇乳肉豪妇荡乳xxx| 免费欧美日韩国产三级电影| 成年女人18级毛片毛片免费| 欧美freesextv| 久久资源亚洲| 日本免费精品| 国产精品久久久久久久久久三级 | 少妇人妻精品一区二区三区| 欧美性猛交xxxx黑人交| 日本一级片免费看| 亚洲少妇中出一区| 亚洲最大成人综合网| 岛国av在线一区| 女同激情久久av久久| 亚洲欧美日韩一区在线观看| 中文字幕在线中文| 成人黄色小视频| 鲁片一区二区三区| 88久久精品| 亚洲aⅴ男人的天堂在线观看| 经典三级一区二区| 68精品久久久久久欧美| 在线观看电影av| 日韩中文有码在线视频| 男女网站在线观看| 精品夜色国产国偷在线| 欧美少妇bbw| 欧美大片在线观看一区| 91影院在线播放| 在线观看91视频| 国产精品va无码一区二区三区| 亚洲成人精品在线观看| 久久久精品国产sm调教| 亚洲乱码国产乱码精品精98午夜 | 亚洲一区二区三区视频在线| 亚洲欧美卡通动漫| 国产精品女主播在线观看| av电影网站在线观看| 久久人人超碰精品| 9.1成人看片免费版| 久久综合九色综合97婷婷| yy1111111| av成人动漫在线观看| 一二三区视频在线观看| 国产精品亚洲人在线观看| 手机在线免费毛片| 国产一区福利在线| 91亚洲一区二区| 国产毛片精品视频| 亚洲国产综合av| 国产成人日日夜夜| 亚洲av成人片无码| 91在线云播放| 粉嫩av蜜桃av蜜臀av| 久久久久久久网| 91麻豆精品国产91久久综合| 国产精品久久久久影院亚瑟| 青青青视频在线免费观看| 日韩一区有码在线| 欧美日韩综合一区二区| 午夜视频在线观看一区| 日韩欧美高清在线观看| 欧美色视频日本高清在线观看| 五月天婷婷久久| 91久久精品午夜一区二区| 波多野结衣电车痴汉| 欧美三级在线播放| 国产乱码一区二区| 精品免费视频一区二区| 在线观看xxx| 在线观看日韩视频| a级毛片免费观看在线| 久久人人97超碰精品888| 中文字幕高清在线播放| 国产精品日日摸夜夜添夜夜av| 亚洲精品成人一区| 国产精品日韩一区二区| 美女久久久久| 裸体裸乳免费看| 亚洲国产日本| 亚洲一区在线不卡| 国产成人无遮挡在线视频| 加勒比综合在线| 亚洲日本欧美天堂| 国产精品久久久久久99| 欧美日韩在线免费视频| 好男人www在线视频| 国产一区二区三区视频在线观看| 免费av在线网址| 91精品国产91久久久久| 玖玖精品在线| 国产精品一区二区三区免费| 日韩精品永久网址| av在线播放亚洲| 蜜臀久久久99精品久久久久久| 国产精品99精品无码视亚| 久久亚洲精精品中文字幕早川悠里 | 妞干网在线观看视频| 青青草97国产精品免费观看无弹窗版| 亚洲一区二区三区四区精品| 久久久久久久久久久久久久久99| 波多野结衣在线网址| 色婷婷av一区二区三区gif| 99久久精品无免国产免费| 亚洲人成在线观看| 欧美性爽视频| 国产日韩欧美综合| 免费看成人吃奶视频在线| 在线观看17c| 麻豆久久一区二区| 受虐m奴xxx在线观看| 亚洲综合成人在线视频| 中文字幕在线2019| 日韩av在线免费观看| 婷婷色在线播放| 国产欧美日韩丝袜精品一区| 一个色免费成人影院| 国产中文字幕乱人伦在线观看| 久久成人免费日本黄色| 88久久精品无码一区二区毛片| 亚洲妇熟xx妇色黄| 国产人妖一区二区| 色七七影院综合| 丝袜诱惑一区二区| 国产主播一区二区三区四区| 欧美久久综合| 亚洲理论中文字幕| 国产精品拍天天在线| 免费看污视频的网站| 亚洲精品自拍视频| 超碰99在线| 国产亚洲精品自在久久| 欧美天天在线| 91丨porny丨九色| 亚洲色图视频网| 国产又粗又猛又色又| 最新69国产成人精品视频免费| 婷婷综合六月| 日韩中文不卡| 视频一区二区欧美| 欧美人妻一区二区三区| 色婷婷综合久久久中文一区二区| 色视频在线观看| 日韩美女毛茸茸| 久久不见久久见中文字幕免费| 国产91在线免费| 97久久超碰国产精品电影| 国产午夜福利片| 亚洲成色777777女色窝| www.综合网.com| 疯狂蹂躏欧美一区二区精品| 中文字幕在线国产| 亚洲黄网站在线观看| a级片在线播放| 久久久久久久久久久国产| 精品福利一区| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 972aa.com艺术欧美| 亚洲GV成人无码久久精品| 亚洲欧美综合区自拍另类| 美女福利一区二区三区| 天堂一区二区三区| 国产在线精品视频| 精品无码黑人又粗又大又长| 亚洲成人久久一区| 网友自拍亚洲| 中文字幕99| av一区二区三区四区| 美女又爽又黄免费视频| 日韩亚洲成人av在线| 国色天香久久精品国产一区| www插插插无码免费视频网站| aa级大片欧美| 中文字幕一二三四| 久久91亚洲精品中文字幕奶水| 国产精品网址| 色一情一乱一伦一区二区三区日本| 国产精品久久久久一区二区三区共| 国产麻豆一精品一男同| 久久久久久久999精品视频| 久久不卡国产精品一区二区 | 精品无码m3u8在线观看| 亚洲美女精品成人在线视频| 日韩黄色在线| 五十路熟女丰满大屁股| 欧美激情自拍偷拍| 亚洲成熟女性毛茸茸| 日韩av高清不卡| 亚洲91视频| 国产美女精品久久| 91精品国产乱| 高清av不卡| 免费极品av一视觉盛宴| 久久久久久一二三区| www.久久成人| 国产精品久久久一区| 影音先锋亚洲电影| 我要看黄色一级片|