Android SwipeBackLayout简单示例
GitHub中以前也用过一个SwipeBackLayout的框架也是目前同类中星最多的有6K,
但是最近使用发现滑动,背景页面会出现黑屏,
项目也是几年前的Eclipse工程结构,依赖的还是V4包,
做了简单修改还是有点问题,决定换个框架试试。
后面看了一个新一点的SwipeBackLayout框架:
BGASwipeBackLayout-Android:https://github.com/bingoogolapple/BGASwipeBackLayout-Android
框架中还有几个相关的依赖。
下面只做SwipeBackLayout简单介绍:
1、依赖或者导入lib工程
//远程依赖
implementation 'cn.bingoogolapple:bga-swipebacklayout:2.0.1@aar'
//或者复制lib代码,导入lib工程
compile project(path: ':library')
2、使用过程
(1)初始化
//必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
/**
* 必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回
* 第一个参数:应用程序上下文
* 第二个参数:如果发现滑动返回后立即触摸界面时应用崩溃,
* 请把该界面里比较特殊的 View 的 class 添加到该集合中,目前在库中已经添加了 WebView 和 SurfaceView
*/
BGASwipeBackHelper.init(this, null);
}
}
(2)将下面的代码拷贝到你自己的 BaseActivity 中
/**
* 描述:开发者可将该类中的某些方法拷贝到自己的 BaseActivity 中封装成适合自己项目的滑动返回基类
*
* 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回」
*/
public abstract class BaseActivity extends AppCompatActivity implements BGASwipeBackHelper.Delegate, View.OnClickListener {
protected BGASwipeBackHelper mSwipeBackHelper;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
// 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回」
// 在 super.onCreate(savedInstanceState) 之前调用该方法
initSwipeBackFinish();
super.onCreate(savedInstanceState);
Log.d(this.getClass().getSimpleName(), "onCreate");
initView(savedInstanceState);
setListener();
processLogic(savedInstanceState);
}
/**
* 初始化滑动返回。在 super.onCreate(savedInstanceState) 之前调用该方法
*/
private void initSwipeBackFinish() {
mSwipeBackHelper = new BGASwipeBackHelper(this, this);
// 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回」
// 下面几项可以不配置,这里只是为了讲述接口用法。
// 设置滑动返回是否可用。默认值为 true
mSwipeBackHelper.setSwipeBackEnable(true);
// 设置是否仅仅跟踪左侧边缘的滑动返回。默认值为 false
mSwipeBackHelper.setIsOnlyTrackingLeftEdge(false);
// 设置是否是微信滑动返回样式。默认值为 true
mSwipeBackHelper.setIsWeChatStyle(true);
// 设置阴影资源 id。默认值为 R.drawable.bga_sbl_shadow
mSwipeBackHelper.setShadowResId(R.drawable.bga_sbl_shadow);
// 设置是否显示滑动返回的阴影效果。默认值为 true
mSwipeBackHelper.setIsNeedShowShadow(true);
// 设置阴影区域的透明度是否根据滑动的距离渐变。默认值为 true
mSwipeBackHelper.setIsShadowAlphaGradient(true);
// 设置触发释放后自动滑动返回的阈值,默认值为 0.3f
mSwipeBackHelper.setSwipeBackThreshold(0.3f);
// 设置底部导航条是否悬浮在内容上,默认值为 false
mSwipeBackHelper.setIsNavigationBarOverlap(false);
}
/**
* 是否支持滑动返回。这里在父类中默认返回 true 来支持滑动返回,如果某个界面不想支持滑动返回则重写该方法返回 false 即可
*
* @return
*/
@Override
public boolean isSupportSwipeBack() {
return true;
}
/**
* 正在滑动返回
*
* @param slideOffset 从 0 到 1
*/
@Override
public void onSwipeBackLayoutSlide(float slideOffset) {
}
/**
* 没达到滑动返回的阈值,取消滑动返回动作,回到默认状态
*/
@Override
public void onSwipeBackLayoutCancel() {
}
/**
* 滑动返回执行完毕,销毁当前 Activity
*/
@Override
public void onSwipeBackLayoutExecuted() {
mSwipeBackHelper.swipeBackward();
}
@Override
public void onBackPressed() {
// 正在滑动返回的时候取消返回按钮事件
if (mSwipeBackHelper.isSliding()) {
return;
}
mSwipeBackHelper.backward();
}
/**
* 设置状态栏颜色
*
* @param color
*/
protected void setStatusBarColor(@ColorInt int color) {
//setStatusBarColor(color, StatusBarUtil.DEFAULT_STATUS_BAR_ALPHA);
}
/**
* 设置状态栏颜色
*
* @param color
* @param statusBarAlpha 透明度
*/
public void setStatusBarColor(@ColorInt int color, @IntRange(from = 0, to = 255) int statusBarAlpha) {
//StatusBarUtil.setColorForSwipeBack(this, color, statusBarAlpha);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* 初始化布局以及View控件
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 给View控件添加事件监听器
*/
protected abstract void setListener();
/**
* 处理业务逻辑,状态恢复等操作
*
* @param savedInstanceState
*/
protected abstract void processLogic(Bundle savedInstanceState);
/**
* 需要处理点击事件时,重写该方法
*
* @param v
*/
public void onClick(View v) {
}
/**
* 查找View
*
* @param id 控件的id
* @param <VT> View类型
* @return
*/
protected <VT extends View> VT getViewById(@IdRes int id) {
return (VT) findViewById(id);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(this.getClass().getSimpleName(), "onDestroy");
}
@Override
protected void onStop() {
super.onStop();
Log.i(this.getClass().getSimpleName(), "onStop");
}
}
(3)新创建的Activity都继承BaseActiviy
//跳转到下一个页面时候使用方法
mSwipeBackHelper.forward(SecondActivity.class);
到这里即可以实现页面右滑关闭页面效果。
简单效果的demo:
资源路径:
https://download.csdn.net/download/wenzhi20102321/12154869
Github中的demo加了好几个框架内容,这里提供一下我的demo代码,
这个demo除了基础的v7包没有任何远程依赖,相对来说比较简单明了。
demo代码里面包含简单示例的apk。
共勉:决定我们成为什么样的人,不是我们的能力,而是我们的选择。
版权声明:本文为wenzhi20102321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。