欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android仿微信滑动退出Activity

程序员文章站 2024-02-22 17:15:47
效果图: 原理:         原理一句话就能描述清楚。重写activity的dis...

效果图:

Android仿微信滑动退出Activity

原理:

        原理一句话就能描述清楚。重写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,希望对大家有所帮助