Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android仿微信滑動退出Activity

Android仿微信滑動退出Activity

編輯:關於Android編程

效果圖:


原理:

        原理一句話就能描述清楚。重寫Activity的dispatchTouchEvent,滑動的時候拿到Activity棧中棧頂Activity的上一個Acticity的ContentView添加到棧頂Activity的DecorView中,滑動的過程中做視圖平移,滑動結束之後把前面拿過來用的ContentView歸還給上一個Activity,然後finish當前Activity。

ActivityStack:

        實現 Application.ActivityLifecycleCallbacks 接口,在App的Application中注冊這個棧,當App中的Activity新增或者刪除時會回調接口中的方法。

public class ActivityBackStack implements Application.ActivityLifecycleCallbacks { 
  private Stack<Activity> mActivityStack; 
  public ActivityBackStack() { 
    mActivityStack = new Stack<>(); 
  } 
  @Override 
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
    mActivityStack.add(activity); 
  } 
  @Override 
  public void onActivityStarted(Activity activity) { 
  } 
  @Override 
  public void onActivityResumed(Activity activity) { 
  } 
  @Override 
  public void onActivityPaused(Activity activity) { 
  } 
  @Override 
  public void onActivityStopped(Activity activity) { 
  } 
  @Override 
  public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
  } 
  @Override 
  public void onActivityDestroyed(Activity activity) { 
    if (activity != null) { 
      mActivityStack.remove(activity); 
    } 
  } 
  /** 
   * 獲取棧頂的Activity 
   * 
   * @return 
   */ 
  public Activity getLastActivity() { 
    return mActivityStack.lastElement(); 
  } 
  /** 
   * 獲取倒數第二個Activity 
   * 
   * @return 
   */ 
  public Activity getPreActivty() { 
    int size = mActivityStack.size(); 
    if (size < 2) { 
      return null; 
    } 
    return mActivityStack.get(size - 2); 
  } 
  public int getSize() { 
    return mActivityStack.size(); 
  } 
}

然後在Application中注冊這個實現類

registerActivityLifecycleCallbacks(mBackStack); 

DecorView:

        1.DecorView 為整個Window界面的最頂層View

        2.DecorView只有一個子View LinearLayout,代表整個Window界面,包括ton通知欄,標題欄,和內容區域。

        3.獲取DecorView:activity.getWindow().getDecorView()

滑動:

        重寫Activity的dispatchTouchEvent,設定一個閥值,在閥值內出發時拿到上一個Activity的ContentView添加到當前的DecorView中,index為0,置於最低定。滑動的過程中動態改變容器的X值,讓其做出平移效果,松開手之後做取消或者關閉動畫。動畫結束後把前面拿到的ContentView歸還。

DEMO:

        https://github.com/gumingwei/SwipeBackActivity

以上所述是小編給大家介紹的Android仿微信滑動退出Activity,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved