热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android微信右滑退出功能的实现代码

这篇文章主要介绍了Android微信右滑退出功能的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

先给大家展示下效果图,如果大家感觉效果不错,请参考实例代码,

 

act2是Main2Activity,act3是Main3Activity

原理

滚动

首先我们知道每个Activity展示的内容一般都是DecorView去承载的,不知道的看下图,其中状态栏背景也包括在内:

 

DecorView

所以我们第一步,只需要滚动DecorView内容或者平移DecorView就行了。

使上一个Activity可见

上面的Activity不可见其实是因为被当前Activity给挡住了。那问题来了。

Q:为什么我把布局颜色设置成透明背景,可还是看不到上面的Activity呢?

A:看上面的DecorView那张图,我们Activity布局只是填充content里面的内容,也就是说我们是被ContentFrameLayout包裹住的,Activity布局文件的根元素并不是Activity的根元素,由层级可知。 我们的Activity被上层的Activity挡住,其实是因为DecorView具有背景颜色,我们只需要把它的背景色去掉就行了。

实现

第一步设置透明主题


 
 

   
    
    
   
  
  

我们把Main3Activity的DecorView背景色去掉了。

滚动DecorView内容

这里我们使用滚动DecorView内容而不是滚动整个DecorView。

首先大家需要搞懂一个View的 ScrollBy 和 ScrollTo 是什么回事,参考 Android scrollTo和scrollBy方法使用说明

Main3Activity.java

public class Main3Activity extends AppCompatActivity {
 /**
  * DecorView左边滑出间距占屏幕宽度PRESENT_TO_FINISH时表示用户需要退出当前Activity
  */
 private static final float PRESENT_TO_FINISH = 0.3f;
 /**
  * 用户距离左边MIN_EDGE_DISTANCE内拖动有效
  */
 private static final int MIN_EDGE_DISTANCE = 100;
 /**
  * 屏幕宽度
  */
 private static float mScreenW = -1;
 /**
  * 用户计算用户在屏幕滑动的距离
  */
 private float mStartX = 0;
 /**
  * 当前是否允许拖动
  */
 private boolean mIsScrollEnable = false;
 /**
  * 当前Activity的DecorView
  */
 private View mDecorView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main3);
  // 初始化
  mDecorView = getWindow().getDecorView();
  if (mScreenW == -1) {
   DisplayMetrics metrics = new DisplayMetrics();
   getWindowManager().getDefaultDisplay()
     .getMetrics(metrics);
   mScreenW = metrics.widthPixels;
  }
 }
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  if (event.getAction() == MotionEvent.ACTION_DOWN) {
   mStartX = event.getX();
   if (mStartX  PRESENT_TO_FINISH ? (int) -mScreenW : 0;
   ValueAnimator animator = ValueAnimator.ofInt(mDecorView.getScrollX(), targetX);
   animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
     mDecorView.scrollTo((Integer) animation.getAnimatedValue(), 0);
    }
   });
   animator.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
    }
    @Override
    public void onAnimationEnd(Animator animation) {
     if (targetX == -mScreenW) {
      finish();
     }
    }
    @Override
    public void onAnimationCancel(Animator animation) {
    }
    @Override
    public void onAnimationRepeat(Animator animation) {
    }
   });
   animator.start();
  }
  return super.onTouchEvent(event);
 }
}

写在最后

这是最简单最简单的做法,无任何封装与扩展,包括一些可能存在的滚动冲突也没有去处理。大家可以封装一个比较完善并且容易使用的库,加入ListView之类的滑动冲突处理以及背景色透明渐变之类的,然后里面的xml代码转换成对应deJava代码写法。一句话使Activity实现该功能也是可以做到的。

总结

以上所述是小编给大家介绍的Android微信右滑退出功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • 智能消息服务数字短信使用FAQ
    本文介绍了智能消息服务数字短信的开通流程和操作步骤,包括开通数字短信的路径、申请流程、控制台操作以及API接口对接模式。同时还介绍了数字短信模板的创建规则和要求,包括审核状态的说明和建议。 ... [详细]
author-avatar
mobiledu2502873797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有