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

滑动效果的七种方式

滑动效果的产生滑动一个view,本质上就是说移动一个view。改变其当前所处的位置,他的原则与动画效果的实现非常相似,都是通过不断地改变



滑动效果的产生

滑动一个view,本质上就是说移动一个view。改变其当前所处的位置,他的原则与动画效果的实现非常相似,都是通过不断地改变view的坐标来实现这一效果。因此,要实现view滑动,就必须监听用户触摸事件,并根据事件传入的坐标,动态且不断的改变view的坐标,从而实现view的滑动。
先从基本的说起吧。
1.Android坐标系
view滑动需要参考一个标准,在Android中,屏幕的左上角顶点作为原点
这里写图片描述
而系统提供了

public void getLocationOnScreen(int[] location) {// TODO Auto-generated method stubsuper.getLocationOnScreen(location);}

这样的方法来获取Android坐标系中的点的位置,就是该视图左上角的坐标。另外在触控事件中使用getRawX(),getRawY()方法获得的坐标同样是Android坐标系中的坐标。

2 视图坐标系

这里写图片描述

描述了子视图在父视图中的位置关系,他们的作用是相辅相成的,并不矛盾,不过在视图坐标系中的原点是父视图左上角的位置,如上图;
在触控事件中,通过getX(),getY()方法来获得视图中的坐标。
3 触控事件 ——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 event)方法中通过event.getAction()方法获取触控事件的类型,并使用switch-case方法进行删选,这个代码模式基本固定;

@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stub//获取当前输入点的X Y坐标(视图坐标)int x=(int) event.getX();int y=(int) event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN://处理输入的按下事件break;case MotionEvent.ACTION_MOVE://处理输入的移动事件break;case MotionEvent.ACTION_UP://处理输入的离开事件break;default:break;}return true;}

在Android中提供了很多的方法来获取坐标值,相对距离等。方法丰富固然好,同样给我们带来了很多困扰,不知道在什么情况下使用它们,下面总结了一些API,结合坐标系咱们来看看;

这里写图片描述

View提供的获取坐标的方法
getTop();
view自身的顶边到其父布局顶边的距离;

getLeft();
view自身的左边到其父布局左边的距离;

getRight();
view自身的右边到其父布局左边的距离;

getBottom();
view自身的底边到其父布局顶边的距离;

MotionEvent提供的获取坐标系的方法

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

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

getRawX();
获取点击事件距离整个屏幕左边的距离,即绝对坐标

getRawY();
获取点击事件距离整个屏幕顶边的距离,即绝对坐标

相信大家现在对于Android坐标,MotionEvent有了一个比较清楚的认识了,接下来的几章会进入我们的主题——滑动的七种方式。


推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • macOS命令行创建Android模拟器
    macOS下不安装AndroidStudio使用VSCode来开发Flutter应用使用命令行创建和管理Android模拟器设备avdmanageravdmanager 是一种命令 ... [详细]
author-avatar
坦克大道_639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有