側滑回退的layout(相似IOS側滑回退到上一个activity)
用过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)的更多相关文章
- iOS側拉栏抽屉效果Demo
源代码下载 側拉栏抽屉效果Demo 须要导入第三方的类库例如以下: 抽屉效果所需第三方类库下载 效果:既能够两側都实现抽屉效果也可仅仅实现左側栏或者右側栏的抽屉效果 waterm ...
- 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 ...
- Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)
当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件
iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 步骤 第一步:在 Proj ...
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...
- mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)
mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除) 2018-06-19更新显示样式
- iOS 添加第三方.framework 打包上传iTunesConnect 遇到的坑
1.添加完第三方库,模拟器运行没事,打iOS通用设备包的时候报一个错. ld: '/Users/jiangwei.wang/Documents/Project/APP NAME/SeosMobileK ...
- 转 如何在IOS设备中去掉屏幕上的status bar
引入如何在IOS设备中去掉屏幕上的status bar,即:不显示设备上方的[网络.时间.电池??]条?操作方法一:在-info.list项目文件中,加上“Status bar is initiall ...
随机推荐
- sass学习--在htm文件中使用
一.导语 最近的战狼2好火爆啊,每天看战狼2的票房一路高飙,我估计比吴京还开心.看了这部戏的拍摄过程,除了敬佩就是踏实,是的,吴京是电影圈隔了这么久后能踏踏实实做电影的了,纯属个人见解,不喜请忽略.. ...
- javaScript中的return,break,continue的区别
导语: javaScript中有三种方法可以跳出循环或者终止循环.分别为break.return.continue. 正文: 一.break break 会使得整个程序终止执行或者包含了最内层的循环或 ...
- gulp一般使用
gulp的基本使用总结了一下几点: 1.gulp-ejs的使用 [ file include,html文件合并 ]: let ejs = require("gulp-ejs"); ...
- mysql将字符串转化为数字
我的字段为内容为数字,但是类型为字符串,需要使用CASE转换即可 SELECT MAX(CAST(C_id AS UNSIGNED)) INTO id 即查询出来最大的C_id,否则会按照字符串查询最 ...
- ML技术 - 特征选择
1. 决策树中的特征选择 分类决策树是一种描述对实例进行分类的树型结构,决策树学习本质上就是从训练数据集中归纳出一组分类规则,而二叉决策树类似于if-else规则.决策树的构建也是非常的简单,首先依据 ...
- C# 自定义样式实现菜单和工具栏的分割线
在做WinForm界面布局时,菜单和工具栏必不可少!但是MenuStrip和ToolStrip不能够对边框的样式直接设置,如果想实现菜单和工具栏之间的分割线就不容易实现:今天查阅了一下msdn找到了一 ...
- web前端-----第一弹html
HTML 初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s ...
- python调用c代码2
1.生成动态链接库 [root@typhoeus79 c]# more head.c #include <stdio.h> #include <stdlib.h> typede ...
- ajax异步传送数据的方法
1, 此方法为ajax异步发送后台数据的方法 var payment_id=$(this).attr("name"); alert(payment_id); $('.label') ...
- bootstrap的模态简单案例
使用时需添加bootstrap的引用,否则实现不出来效果 <!DOCTYPE html> <html><head> <meta name="v ...