Android实现侧滑只需一步
先解释一下这个标题,说的是实现App侧滑返回功能只需要一行代码就能搞定,怎么做到的我待会会说。侧滑所指的就是侧滑返回,后面的介绍过程我将用侧滑表面其意。请看侧滑效果如下图:
Github地址:0侵入侧滑返回
使用
在 Application 初始化
SwipeBackHelper.init(this); // 就这一步操作
本篇不打算长篇大论解释原理,只想跟大家说一下我的思考。
笔者的项目中也有侧滑返回功能,和很多侧滑的开源项目一样,需要继承swipeBackActivity基类,实现控制侧滑返回方法。我觉得这是比较乏味的。而且很多侧滑框架需要使用透明主题true(默认为false)
<item name="android:windowIsTranslucent">true</item>
这个属性在实际应用中是纯在问题的它会引起一系列的动画问题,如前后台切换动画、Activity回退动画等。还有个值得注意的是在界面跳转的时候,发起跳转的Activity只会执行onPause方法,而不会执行onStop方法。
于是乎我决定改变这个局面,在这个过程中我有三个方面的考虑:对项目倾入性,高地版本手机适配性,主题兼容性。要抓好这三个点,这是我的目的。下面我就这三个方向具细的说
倾入性
能不能做到不改动Activity的就能使它拥有侧滑的能力?答案是肯定的。这里我用到了ActivityLifeCallbacks技术,需要API 14+ 在onActivityCreated函数里面动态的把侧滑控件植入到布局最顶级,替换之前的将初始化侧滑代码写在Activity里方式。并且动态的判断是否第二个入栈的Activity如果是再植入。因为第一个启动的Activity是不需要侧滑的,比如我们的首页界面。
适配性
在适配性方面我希望在高低版本的手机当中侧滑效果是一样的,不会出现闪一下的情况
改写swipeBack的时候,遇到在高版本的手机当中侧滑结束的时候有几率会闪一下,这让我很是头疼不过也得解决啊。于是我找了其他测滑库也试试看,我发现一部分也有相同的问题,一部分没有。于是我进一步分析那些不会闪一下的侧滑库,发现他们它们都有一个共同点,就是必须使用透明主题。这种强制要求对于我来说是不接受的,我一定要解决这个痛点。为什么会闪一下?其实很简单,因为侧滑结束的时候Activity finish会有一个退出动画,所以你会看到闪一下的场景。那我们就把退出动画"取消吧",于是我将退出动画设置成如下:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:interpolator/decelerate_quad"> </set>
ps:这个动画我是从系统anim里面当中找出来的
做了以上改动之后发现并没有彻底解决,虽然闪一下的几率是大大降低了。左四右想我想我用到另外一种方式。我在dispatchDraw中将前一个activity界面中的DecorView绘制到当前activity中的画布上,因为dispatchDraw()方法先执行,那么它就会将activity A中的DecorView绘制到当前activity B界面上。接着B进入onPause,此时界面上仍然显示的是B的内容。再接着进入A onStart,此时系统准备A的界面,将A中的DecorView重新绘制到当前A界面中。下来进入A onResume,此时屏幕上显示A的界面,同时隐藏B的界面。因为A界面和B界面是同样的内容,所以屏幕的显示不会有切换效果
兼容性
在兼容性方面我希望做到兼容透明主题与非透明主题。
因为这个两个选项在每个项目中都是不固定的,不统一的。不能因为使用了SwipeBack就要改变他,这是不太友好的。应该更好的对待它们,兼容它们。处理这一点我用到了反射技术。反射Activity的convertFromTranslucent方法将透明主题转为不透明兼容两者。
总结
以上就是我今天和大家分享的Android侧滑Lib,已经使用到我的项目中。
Github地址:0侵入侧滑返回
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Android使用DrawerLayout实现仿QQ双向侧滑菜单
1.概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣:另一方面,这玩意用起来的确方便,于是简单写了个demo,高仿QQ5.2双向侧滑,分享给大家. 首先看看效果图: DrawerLayout用起来真的很方便,下面一起看看用法~ 2.DrawerLayout的使用 直接将DrawerLayout作为根布局,然后其内部第一个View为内容区域,第二个View为左侧
-
Android 仿京东侧滑筛选实例代码
简单介绍 这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括ListView+CheckBox滑动冲突,ListView+ GridView显示一行问题解决,接口回调传递数据等 效果图 简单得代码介绍 1.首页侧滑用的是安卓官方V4包中的DrawerLayout <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLa
-
Android实现原生侧滑菜单的超简单方式
先来看看效果图 当你点击菜单可以更改图标,例如点击happy,首页就会变一个笑脸,这个实现的过程超级简单 你需要使用ToolBar与DrawableLayout两个比较新的控件 首先要写三个xml布局文件,我这里的布局文件是使用了include标签嵌入的,代码如下 headbar_toolbar.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar
-
代码分析Android实现侧滑菜单
Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单.最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装FlipperLayout. 1.实现效果 2.动画类UgcAnimations package com.mmsx.base; import android.content.Context; import android.view.View; import android.view.ViewGroup.MarginLayoutParams; import and
-
Android开源组件SlidingMenu侧滑菜单使用介绍
现在很多android应用都有侧滑菜单,效果很不错. GitHub上有SlidingMenu的开源库,使用起来很方便. SlidingMenu GitHub地址:https://github.com/jfeinstein10/SlidingMenu.GitHub上说,Sliding结合ActionBarSherlock使用功能可以更丰富,ActionBarSherlock GitHub地址:https://github.com/JakeWharton/ActionBarSherlock 附csd
-
Android滑动优化高仿QQ6.0侧滑菜单(滑动优化)
推荐阅读:Android使用ViewDragHelper实现仿QQ6.0侧滑界面(一) 但是之前的实现,只是简单的可以显示和隐藏左侧的菜单,但是特别生硬,而且没有任何平滑的趋势,那么今天就来优化一下吧,加上平滑效果,而且可以根据手势滑动的方向来判断是否是显示和隐藏. 首先先来实现手势判断是否隐藏和显示 这里就要用到了一个方法了,如下: 这个是ViewDradHelper里面的方法: /** * 当view被释放的时候处理的事情(松手) * * @param releasedChild 被释放的
-
Android原生侧滑控件DrawerLayout使用方法详解
在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的"抽屉"功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一个简单效果的部分截图: 左拉: 右拉: 怎么样?是不是在平时开发的应用中很常见?OK,那么接下来我直接上代码: activity_sliding.xml: <?xml version="1.0" encoding="utf-8"?> <android.
-
Android自定义可编辑、删除的侧滑LisitView
最近由于项目的需要,自定义了一个具有侧滑功能的listview,侧滑后可以点击编辑.删除.好了,大家先看一下效果图,毕竟是看脸的世界. 好了,我要先讲一下思路,一次编辑很难完善,有什么问题我后来还会补上,欢迎各位大神拍砖: 1.首先先说一下item:item用的LinearLayout布局,删除.编辑分别是写死了宽度的TextView,左边是一个match_parent的RelativeLayout,内容自己随意搞 2.上下滑动和左右滑动的处理:当用户手指滑动时,可以进行坐标的判断,如果Y轴移动
-
Android高仿QQ6.0侧滑删除实例代码
推荐阅读: 先给大家分享一下,侧滑删除,布局也就是前面一个item,然后有两个隐藏的按钮(TextView也可以),然后我们可以向左侧滑动,然后显示出来,然后对delete(删除键)实现监听,就可以了哈.好了那就来看看代码怎么实现的吧. 首先和之前一样 自定义View,初始化ViewDragHelper: package com.example.removesidepull; import android.content.Context; import android.support.v4.wi
-
Android实现侧滑只需一步
先解释一下这个标题,说的是实现App侧滑返回功能只需要一行代码就能搞定,怎么做到的我待会会说.侧滑所指的就是侧滑返回,后面的介绍过程我将用侧滑表面其意.请看侧滑效果如下图: Github地址:0侵入侧滑返回 使用 在 Application 初始化 SwipeBackHelper.init(this); // 就这一步操作 本篇不打算长篇大论解释原理,只想跟大家说一下我的思考. 笔者的项目中也有侧滑返回功能,和很多侧滑的开源项目一样,需要继承swipeBackActivity基类,实现控制侧滑返
-
spring boot只需两步优雅整合activiti示例解析
目录 前言 springboot整合activiti只需两步 1.添加boot的activiti模块 2.添加你的流程图文件 增强你的activiti,发布restful管理activiti resource 1.添加依赖 2.添加用户组以及用户,只有验证通过才能管理activiti 增强你的activiti,发布restful管理boot应用 1.添加依赖 2.相关接口信息 前言 本文描述的是怎么将activiti优雅的整合进你的spring boot应用,并增强你的activiti管理功能,
-
IDEA中Debug调试VUE前端项目调试JS只需两步
目录 前言 第一步,找到jsdebug运行时 第二步.打断点.运行jsdubg项 结语 前言 有一个礼拜没发quarku+graalvm相关的内容了,因为博主在忙一个新的前端项目去了,从element-ui切换到antdv,也有很多新的东西需要一边啃文档一边输出,程序出现bug自是在所难免的,所以需要开发工具可以非常方便的debug程序. 在java开发中,debug就是一个debug启动按钮解决的事情,而在前端开发中,IDEA这个开发工具也提供了非常好用的jsdebug工具,博主的这个用法不是
-
springboot2.x只需两步快速整合log4j2的方法
前言 本文详细介绍如何使用spring-boot2.x快速整合log4j2日志框架. spring-boot2.x使用logback作为默认日志处理库,因此我们除了要引用log4j2之外,还要去除logback的依赖 1.依赖库 maven方式: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifac
-
Sql Server 2012完全卸载方法 只需8步轻松卸载
轻松通过八步实现Sql Server 2012完全卸载,供大家参考,具体内容如下 第一步,在控制面板里面找到程序--卸载程序这一项,打开之后就会是这样的了 第二步,经过第一步打开卸载程序后,在里面找到Microsoft SQLserver 2012 (64-bit)这一项,可以通过右上角搜索框寻找 第三步,点击右键,卸载,此时安装程序启动,开始着手删除SQL了 第四步,选择实例选择需要删除的内容,在这里有选择实例--选择功能--删除规则-- 准备删除--删除进度--完成,点击下一步,进行删除,下
-
只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼,简化Spring配置简直可以说是民心所向. Spring Boot是由Pivotal团队提供的一个基于Java的全新的开源框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.如今,Spring Boot逐渐成为快
-
Windows操作系统整理 只需五步就可完美
关于Windows系统的清理,虽然网上方法很多,其它只要做到简单的几条就可以了. 1.定期整理硬盘 严重的硬盘碎片会大幅度降低你的电脑响应速度.所以你就需要定期的对磁盘进行清理,磁盘清理非常简单,首先单击"开始",依次指向"所有程序"."附件"."系统工具",然后单击"磁盘清理".如果有多个驱动器,会提示您指定要清理的驱动器. 2.定期清理Windows注册表 防止注册表垃圾使用Registry First
-
Python对接六大主流数据库(只需三步)
作为近两年来最火的编程语言的python,受到广大程序员的追捧必然是有其原因的,如果要挑出几点来讲的话,第一条那就python语法简洁,易上手,第二条呢? 便是python有着极其丰富的第三方的库. 所以不管你使用的关系型数据库是oracle,mysql, sqlserver,还是关系型数据库redis,mongoDB. python都有有与之对应的第三方库. 下面就来为大家一一介绍一下! Mysql 我们先来看看如何对接mysql数据库,python2和python3中对接mysql的库是不一
-
Android金额输入框只允许输入小数点后两位效果
一:要实现这个效果也不是很复杂,只需要设置输入框输入的字符类型.设置InputFilter.设置输入变化监听即可.下面直接来看代码吧-. 二:new 一个class extends AppCompatEditText并写上一个初始化函数 private void init() { //设置输入框允许输入的类型(正则) //对应的布局属性是--->android:digits="0123456789." setKeyListener(DigitsKeyListener.getIns
-
Go语言开发区块链只需180行代码(推荐)
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了解所有其他关于区块链的基础知识. 但是,文章中将不会涉及工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法,同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如"全网广播"这个过程等内容将在后续文章中补上.
随机推荐
- NDK 数据结构之队列与栈等的实现
- JSP一句话后门
- pycharm 使用心得(七)一些实用功能介绍
- CentOS 7搭建Linux GPU服务器的教程
- 将数据插入到MySQL表中的详细教程
- iOS 下拉刷新动画的实现实例
- Spring MVC返回的json去除根节点名称的方法
- 使用Promise链式调用解决多个异步回调的问题
- JavaScript标准对象_动力节点Java学院整理
- Java输入输出流复制文件所用时间对比
- 基于HBase Thrift接口的一些使用问题及相关注意事项的详解
- Java开发者推荐的10种常用工具
- jQuery EasyUI tree 使用拖拽时遇到的错误小结
- jQuery中:gt选择器用法实例
- jQuery常用选择器详解
- 网易首页的新闻代码
- JavaScript获得指定对象大小的方法
- Linux系统 改善FTP服务器的安全性
- VS2012 程序打包部署图文详解
- laravel ORM 只开启created_at的几种方法总结