用过apple的同学应该都知道,大多数IOS应用都支持側滑回退,就不具体说明了,直接上图:

作为使用ios的android开发人员来说,我是特别喜欢这个功能的。既然这样,那就在android上也实现这个功能吧。

构思:

1、要处理滑动事件,并且优先级比較高。所以必须在父View中处理,也就是我们layout中的顶级View(当然这里说的顶级View不是DecorView,不过layout里面的第一层View),通常是ViewGroup。

2、既然是ViewGroup,我们得思考下,这个滑动事件我们是在哪个方法里处理,有同学说了,onTouchEvent(),OK,我们再分析下,假如我们在onTouchEvent()中处理,由view的事件分发我们能够知道:

我们知道了这个循序以后,所以我们得选择优先处理事件的方法。这个就能够从onInterceptTouchEvent()和dispatchTouchEvent()中选,这里我选择了dispatchTouchEvent()。为什么,我也不知道...

3、实现原理

仅仅有横向滑动才处理,而且。仅仅有从边缘滑动才干触发此事件,事实上这就简单了,直接上代码。

    @Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
//推断是否是从边缘滑动
//不是。此事件继续向下分发
if (startX <= OFFSET_DISTANCE) {
return true;
} else {
super.dispatchTouchEvent(event);
} case MotionEvent.ACTION_MOVE:
if (startX <= OFFSET_DISTANCE) {
currentX = (int) event.getX();
distanceX = (int) (currentX - startX);
mScroller.startScroll(-currentX, 0, -distanceX, 0);
invalidate();
}
break;
case MotionEvent.ACTION_UP:
if (startX <= OFFSET_DISTANCE) {
endX = event.getX();
//推断是否到达关闭activity的阀值
if (endX - startX > BACK_DISTANCE) {
//是 通过接口回调
if (callback != null) {
mScroller.startScroll(-currentX, 0, -(getScreentWidth() - currentX), 0);
callback.invokeBack();
} else {
mScroller.startScroll(0, 0, 0, 0);
} } else {
mScroller.startScroll(0, 0, 0, 0);
}
invalidate();
}
break; }
return super.dispatchTouchEvent(event);
}
<pre name="code" class="java">    public void setBackListener(BackViewInterface callback) {
this.callback = callback;
} public interface BackViewInterface {
void invokeBack();
}

使用方式:

1、在BaseActivity中实现接口

2、在子activity中的使用

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

千万不要忘了在子activity中注冊接口

3 、特别注意

因为我们不过滑动的View而在上面提到的真正的顶级view还是没动,没动会带来什么问题呢,尽管栈顶activity的View滑动了,可是滑动的背后是全白的,这个就是真正顶级View的背景色,所以讲到这里。大家知道该怎么做了吧?把Activity主题设置成透明的就ok啦,可是注意要把layout的背景设置成白色。

大功告成啦,上图:

下次有时间给大家分享一个悬浮效果的简单案例:

详情能够关注https://github.com/ray0807

https://github.com/ray0807/ShareFramework/blob/master/balloon/simplifyCorelibs/src/main/java/com/corelibs/views/SplideBackLinearLayout.java

側滑回退的layout(相似IOS側滑回退到上一个activity)的更多相关文章

  1. iOS側拉栏抽屉效果Demo

    源代码下载 側拉栏抽屉效果Demo  须要导入第三方的类库例如以下: 抽屉效果所需第三方类库下载 效果:既能够两側都实现抽屉效果也可仅仅实现左側栏或者右側栏的抽屉效果           waterm ...

  2. iOS 7 - Auto Layout on iOS Versions prior to 6.0

    链接地址:http://stackoverflow.com/questions/18735847/ios-7-auto-layout-on-ios-versions-prior-to-6-0 Stac ...

  3. Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)

    当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...

  4. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  5. iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件

    iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 步骤 第一步:在 Proj ...

  6. iOS Dev (21) 用 AVPlayer 播放一个本地音频文件

    iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...

  7. mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)

    mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除) 2018-06-19更新显示样式

  8. iOS 添加第三方.framework 打包上传iTunesConnect 遇到的坑

    1.添加完第三方库,模拟器运行没事,打iOS通用设备包的时候报一个错. ld: '/Users/jiangwei.wang/Documents/Project/APP NAME/SeosMobileK ...

  9. 转 如何在IOS设备中去掉屏幕上的status bar

    引入如何在IOS设备中去掉屏幕上的status bar,即:不显示设备上方的[网络.时间.电池??]条?操作方法一:在-info.list项目文件中,加上“Status bar is initiall ...

随机推荐

  1. 一键生成koa/koa2项目:

    一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...

  2. php header设置页面编码

    php header设置页面编码 未分类 PHP 页面编码声明方法详解(header或meta) http://www.jb51.net/article/22501.htm PHP 页面编码声明与用h ...

  3. 再学习之MyBatis

    一.框架基本介绍 1.概念 支持普通SQL查询.存储过程和高级映射,简化和实现了Java 数据持久化层的的开源框架,主要流行的原因在于他的简单性和易使用性. 2.特点 持久层 .ORM(对象关系映射) ...

  4. meta 是什么??

    META http-equiv 大全HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容.常用的HTTP-EQUIV类型有: 1.Content- ...

  5. Appscan 配置中登录管理的问题

    一.登录录制时录制为空 这个问题出现在 9.0.3.5 版本上,当时同事一录制为空,我录制却ok,后来发现他录制前将谷歌浏览是打开状态,谷歌浏览关闭掉,再使用外部浏览器Chrome进行会话录制后,问题 ...

  6. oracle精简客户端安装配置及常见问题

    有关Instant client 安装步骤 1.首先在官网下载两个安装包instant/sqlplus,对相关文件进行解压缩,存放本地路径 官网地址:http://www.oracle.com/tec ...

  7. 在昆明网络SEO的走向站外的优化该何去何从?

    昨天大概讲了SEO的站内优化,今天我们来讲讲网站站外的优化. 站外主要以第三平台为主,其中包含站外推广:常规推广.外链建设:利用第三方平台优化关键词排名: 1.博客平台,现在有好多博客平台是很不错的, ...

  8. Transact-SQL知识点梳理

    Transact-SQL基础语言 运行环境:SQL Server 语法约定: 语法约定 用途说明 大写字母 Transact-SQL关键字 斜体 用户提供的Transact-SQL语法参数 粗体 数据 ...

  9. java的String构造对象的几种方法以及内存运行过程

    String类创建对象的方法可以分为以下三种 1.String a = "123"; 2.String b = new String("123"); 3.Str ...

  10. riot.js教程【六】循环、HTML元素标签

    前文回顾 riot.js教程[五]标签嵌套.命名元素.事件.标签条件 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入 ...