热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidScroll滑动效果实例

这篇文章主要为大家分享了AndroidScroll滑动效果实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

        相对于在Android2.x版本上出现的长按、点击事件的效果,不得不说,滑动操作具有更好的用户体验。因此,从Android 4.X版本开始,出现了更多滑动操作的效果。越来越多第三方应用模仿这样的效果,来改善自己的应用。本文,我们刨根问底来探寻滑动效果的产生。

滑动效果如何产生

  滑动一个View,其本质就是移动一个View。便是改变它的坐标位置,它的原理与动画产生的效果原理应该是如出一辙的。其最终本质都是改变其坐标。所以,我们要实现View滑动的效果,就只需要监听用户的触摸事件,动态改变View的坐标。

  这里,说道监听触摸事件,改变View坐标。我们因此因此要了解窗口坐标系与屏幕触摸事件motionEvent。

  Android坐标系

  为什么会有滑动一说了,初中的物理告诉我们,是相对于坐标系发生了运动。在Android中,我们将屏幕左上角定为坐标原点,从这个点向右为x轴的正方向,向下为y轴的正方向。如图所示:

  除了这个系统坐标系之外,还有一个视图坐标系。与系统坐标系类似,以也是以原点向下为y轴的正方向,以原点向右为x轴的正方向。只不过,这个坐标原点是父控件左上角。如图所示:

  我们了解了坐标系,下面我们就了解触摸事件——MotionEvent。

  别小看这个MotionEvent事件,在与用户进行交互的过程中,这个东东必不可少。首先,看他封装那些常量代表不同的事件类型,如下所示:

 //单点触摸属性按下事件
  public static final int ACTION_DOWN       = 0;
  //单点触摸属性抬起事件
  public static final int ACTION_UP        = 1;
  
  //触摸点移动的事件
  public static final int ACTION_MOVE       = 2;
  
  //触摸动作取消
  public static final int ACTION_CANCEL      = 3;
  //触摸越界事件
  public static final int ACTION_OUTSIDE     = 4;

  //多点触摸按下事件
  public static final int ACTION_POINTER_DOWN   = 5;
  
  //多点触摸抬起事件
  public static final int ACTION_POINTER_UP    = 6;

  通常情况下,我们会用这样的模板方法,来监听OnTouchEvent(MotionEvent ev)方法,然后使用switch-case方法进行判断处理,这些都是固定格式,代码如下:

switch (event.getAction()){
 //触摸按下事件
          case MotionEvent.ACTION_DOWN:
          
            break;
//触摸移动状态
          case MotionEvent.ACTION_MOVE:
         
           
            break;
//触摸抬起状态
          case MotionEvent.ACTION_UP:
            break;
        }

  一般情况,不涉及到多点触控的操作,一般用这个代码的模板都能够完成相应事件的监听。

  除此之外,Android系统提供很多方法获取坐标值与相对距离。给我们初学者带来很少困惑,这里一张图就让你搞明白。如图所示:

 

  各种方法解释:

  getLeft()——获取view自身左边到其父控件左边距离。

  getRight()——获取view自身右边到其父控件左边距离。

  getTop()——获取view自身上边到其父控件上边距离。

  getBottom()——获取view自身下边到其父控件上边距离。

  getX()——获取点击事件距离控件左边的距离,即视图坐标。

  getY()——获取点击事件距离控件上边的距离,即视图坐标。

  getRawX()——获取点击事件距离控件屏幕左边的距离,即绝对坐标。

  getRawY()——获取点击事件距离屏幕上边的距离,即绝对坐标。

  这就是对滑动效果产生知识补充。

以上就是本文的全部内容,希望对大家的学习有所帮助。


推荐阅读
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 探讨并提供解决方案以应对 'view is not in the window hierarchy' 的错误提示。 ... [详细]
  • 深入理解异步多线程编程模型
    现代计算机系统中的CPU通过并行处理提高效率,但所谓的并发处理实际上是一种基于轮询的模拟并行。本文探讨了现代处理器如何通过虚拟化技术实现更高的并发性能,以及在.NET框架中如何有效利用线程和异步编程模式。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 本文通过具体示例详细介绍了 Python 中的装饰器和装饰类的使用方法,包括带参数的装饰器和装饰类的应用场景。 ... [详细]
  • 解决 Pytest 运行时出现 FileNotFoundError 的方法
    在使用 Pytest 进行测试时,可能会遇到 FileNotFoundError 错误,提示无法找到指定的文件或目录。本文将探讨该错误的原因及解决方案。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • SpringBoot新手入门指南
    本文旨在为初次接触SpringBoot的开发者提供一份详细的入门指导,包括如何快速搭建并运行一个简单的SpringBoot应用。通过本文,读者将了解Maven项目的构建、必要的配置文件设置以及基本的应用开发流程。 ... [详细]
  • 本视频详细介绍了如何利用J2EE、JBPM 3.x/4.3、Flex流程设计器、jQuery以及授权认证机制构建高效的企业普及版贝斯OA及工作流管理系统。 ... [详细]
  • BL550721、特点液晶驱动输出:Common输出4线,Segment输出36线内置显示寄存器364144bit2线串行接口(SCL,SDA)内置震荡电路内置液晶驱动电源电路13 ... [详细]
  • 本文介绍了如何在Windows操作系统中安装FFTW库,并详细说明了使用Visual Studio 2010进行4096点快速傅里叶变换(FFT)的步骤。包括下载预编译文件、生成库文件以及配置环境等关键环节。 ... [详细]
  • javascript——对象的概念——函数 1 (函数对象的属性和方法)
    一、创建函数函数是一种对象:Function类是对象,可以通过Function实例化一个函数,不过最多的还是利用function来创建函数。方式一:利用Function类来实例化函 ... [详细]
  • 在开发H5页面时,为了减少资源请求和简化工作流程,直接使用SVG和CSS3来创建简单的图形元素是一个高效的选择。本文将探讨如何不依赖于第三方图标库,仅通过HTML和CSS技术实现一个‘返回顶部’的图标。 ... [详细]
  • 在Android应用开发中,当在MenuItem中通过app:actionLayout属性使用Switch控件时,可能会遇到空指针异常的问题。本文将探讨该问题的原因及解决方案。 ... [详细]
  • IEC60825激光产品安全标准详解
    随着激光技术在全球范围内的广泛应用,尤其是激光投影显示技术的兴起,了解和遵守相关的安全标准变得尤为重要。本文将详细介绍IEC60825激光产品安全标准及其重要性。 ... [详细]
author-avatar
星控-集中营_220
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有