利用滑动手势退出当前Activityjava
windowIsTranslucent = true
Firstly,add the following lines to your app/build.gradle.git
dependencies { compile 'com.aitangba:swipeback:1.0.1' }
Secondly, add the following lines to your application.github
public class CustomApplication extends Application{ @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(ActivityLifecycleHelper.build()); } }
Finally, set the activity which need to swipe extends the SwipeBackActivity.api
public class BaseActivity extends SwipeBackActivity { }
Application在Api14以后添加了新的Callback方法缓存
public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { }
这样就能够根据activity的生命周期缓存全部Activity,经过list获取上一个activity的实例,从而获取id为content的ContentView的子View(即setContentView中的View),并进行滑动展现。多线程
默认SwipeBackActivity是支持滑动返回的,不须要滑动返回时则须要复写SwipeBackActivity的方法supportSlideBack
,其中方法canBeSlideBack
意思是可否返回至本Activity;两个方法相互配合使用,以应对各类需求。app
public class SwipeBackActivity extends AppCompatActivity implements SwipeBackHelper.SlideBackManager { private static final String TAG = "SwipeBackActivity"; private SwipeBackHelper mSwipeBackHelper; @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(mSwipeBackHelper == null) { mSwipeBackHelper = new SwipeBackHelper(this); } return mSwipeBackHelper.processTouchEvent(ev) || super.dispatchTouchEvent(ev); } @Override public Activity getSlideActivity() { return this; } @Override public boolean supportSlideBack() { return true; } @Override public boolean canBeSlideBack() { return true; } @Override public void finish() { if(mSwipeBackHelper != null) { mSwipeBackHelper.finishSwipeImmediately(); mSwipeBackHelper = null; } super.finish(); } }
private static final int MSG_ACTION_DOWN = 1; //点击事件 private static final int MSG_ACTION_MOVE = 2; //滑动事件 private static final int MSG_ACTION_UP = 3; //点击结束 private static final int MSG_SLIDE_CANCEL = 4; //开始滑动,不返回前一个页面 private static final int MSG_SLIDE_CANCELED = 5; //结束滑动,不返回前一个页面 private static final int MSG_SLIDE_PROCEED = 6; //开始滑动,返回前一个页面 private static final int MSG_SLIDE_FINISHED = 7;//结束滑动,返回前一个页面
Tips:
在设计过程当中遇到也有过其余思路:
1)设置Activity的透明theme,但是发现只要activity的层级变多就会变得很是卡顿;
2)动态设置Activity的theme,这须要经过反射,并且还须要判断api,部分手机还不兼容;
3)在滑动展现上个Activity的View时,直接将上个Activity的contentView截图保存在内存卡上,而后显示在当前Activity的view上,可是有明显的卡顿感;
以上都是在设计过程当中想到的方案,也逐个实践了一下,发现问题仍是比较多的,想一想还不如另辟蹊径,就有了如今的方案,目前看来仍是能兼容大部分手机的。maven
gitHub地址:https://github.com/XBeats/and_swipebackide