文/程序员男神
前言
这个小功能也是最近接触到,之前只知道这种交互方式,自己并没有去实现。看了一下,才发现其实挺简单的。虽然简单,但是用户在交互方面的体验得到了不少提升。接下来我们看看他的简单实用,分析下它的实现源码。
实用场景
一个界面(Activity)通过意图跳转至下个子Activity,当子模块的代码执行完毕后想返回到上层界面,我们一般在导航栏左侧放置一个返回按钮,或者点击底部的虚拟返回按键返回。全面屏时代的热潮,让我们对于手势的操作更加便捷。SwipeBackLayout可以通过右滑的操作返回到上个操作界面。参考SwipeBackLayout的github地址。
使用步骤
1、添加依赖
compile 'me.imid.swipebacklayout.lib:library:1.1.0'
2、设置需要滑动返回Activity的Theme
首先需要在需要滑动返回的Activity的AppTheme里添加:
<item name="android:windowIsTranslucent">true</item>
3、在BaseActivity中初始化以及设置属性
/**
* 描述: 基类activity
* 作者|时间: djj on 2019/1/17 13:45
* 博客地址: http://www.jianshu.com/u/dfbde65a03fc
*/
public abstract class BaseActivity extends SwipeBackActivity {
private SwipeBackLayout mSwipeBackLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, String.format("%s:onCreate", this));
if (getLayoutId() != 0) {
setContentView(getLayoutId());
}
ButterKnife.bind(this);
// 可以调用该方法,设置是否允许滑动退出
setSwipeBackEnable(true);
mSwipeBackLayout = getSwipeBackLayout();
// 设置滑动方向,可设置EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM
mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
// 滑动退出的效果只能从边界滑动才有效果,如果要扩大touch的范围,可以调用这个方法
mSwipeBackLayout.setEdgeSize(200);
}
}
4、创建两个activity只需要继承BaseActivity即可,第一个activity添加一个按钮跳转到第二个activity,第二个activity只需要右滑就可返回第一个activity
/**
* 描述: 主界面
* 作者|时间: djj on 2019/2/27 13:56
* 博客地址: http://www.jianshu.com/u/dfbde65a03fc
*/
public class MainActivity extends BaseActivity {
@BindView(R.id.tv_show)
TextView mTvShow;
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
@OnClick(R.id.tv_show)
public void onViewClicked() {
startActivity(Main2Activity.class);
}
}
5、Main2Activity没有什么操作,这边省略...