首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onTouchEvent(二) 使用Scroller实现黏性滑动的ScrollView

上一篇博文onTouchEvent(一) 你所必须知道的坐标详解介绍了onTouchEvent()手势控制相关的一些坐标概念,这篇文章结合上一篇内容加上Scroller实现一个简单的带黏性滑动的ScrollView...思路 滑动的时候判断最终偏移量是不是超出了子view(ViewGroup内容)的范围,如果超出了就限制不让其超出,这样就可以做出一个滑动的ScrollView并且不会滑出界 当松手(action_up)...的时候判断当前偏移量在该子view的什么位置,如果小于三分之一就滑动回该view的头部,如果超出三分之二就滑动到下个view 首先看看我们需要做些什么,自定义View要复写的方法有好几个,我们要复写的有...3不用说了,要实现滑动功能必须要实现的函数。 4这是配合Scroller使用的一个函数。 首先介绍下Scroller这个类,这个类是一个工具,并不是实际UI操作。...下面是一个不使用Scroller的Demo。 ? 差别很明显。 ? onMeasure()没什么好说的,遍历子view,测量子view。 onLayout ?

1K30

Scroller简介

Scroller简介 在SlidingMenu项目中为了实现控件的滑动,需要用到Scroller类来实现缓慢的滑动过程,至于有人说View类可以直接调用scrollTo()方法, 这里scrollTo(...查看Scroller源码 public class Scroller { //... } 发现Scroller类并不是View的子类,只是一个普通的类,这个类中封装了滚动的操作,记录了滚动的位置以及时间等...从而我们可以知道调用Scroller.startScroll()方法并没有真正的移动,而是设置了一些数据。 Scroller.startScoll()是如何与View的移动相关联呢?...Scroller} * object. */ public void computeScroll() { } 通过注释我们可以看到该方法又父类调用根据滚动的值去更新View,在使用Scroller...Scroller.startScroll()方法被调用后会储存要滚动的起始位置、结束位置、持续时间。

68090
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不再迷惑,也许之前你从未真正懂得 Scroller 及滑动机制

    我大概知道为什么,可能是你混淆了手指滑动方向和内容滑动方向。 手指向左滑动,内容将向右显示,这时 mScrollX > 0。 手指向右滑动,内容将向左显示,这时 mScrollX 滑动,内容将向下显示,这时 mScrollY < 0。 手指向下滑动,内容将向上显示,这时 mScrollY > 0....当手指在一个 RecyclerView 上快速滑动,如果抬起手指后,RecyclerView 中的内容继续滑动一段距离才停下来的这种情况就称为快速滚动。...Scroller 的完整实战 我们现在的目标是自定义一个 View,检验我们所学习的 Scroller 知识及 View 自身滑动机制如 scrollBy。包括: 1....最重要的一点就是要深刻理解 mScrollX、mScrollY 在 Canvas 坐标中的意义,要区分手指滑动方向、内容滑动方向和 mScrollX、mScrollY 数值的关系。

    1.7K10

    Android开发之Scroller

    什么是Scroller?...翻译为弹性滑动对象,可以实现View的弹性滑动动画,与Scroller相关的就是大家比较熟悉的scrollTo和scrollBy方法,可以用来实现View的滑动,但是它们的缺点就是瞬间完成,无法很平滑地过渡...,而Scroller可以帮助我们很平滑地进行弹性滑动。...使用 一般使用在自定义View中较多,可以实现View的弹性滑动效果 1、自定义一个View,注释很详细 /** * 自定义View 里面有个Scroller 它能实现非常平滑的滚动效果 就像动画一样...Scroller.gif 注意点 Scroller本身并不能实现View的滑动,本质还是让View重绘,重绘中调用View的computeScroll方法,在该方法中进行滑动方法的具体实现,然后再调用重绘函数

    80050

    Android Scroller完全解析,关于Scroller你所需知道的一切

    那ViewPager相信每个人都再熟悉不过了,因此它实在是太常用了,我们可以借助ViewPager来轻松完成页面之间的滑动切换效果,但是如果问到它是如何实现的话,我感觉大部分人还是比较陌生的, 为此我也是做了一番功课...,带你从源码的角度彻底理解,但是对于Scroller我还从来没有讲过,因此本篇文章我们就先来学习一下Scroller的用法,并结合事件分发和Scroller来实现一个简易版的ViewPager。...Scroller是一个专门用于处理滚动效果的工具类,可能在大多数情况下,我们直接使用Scroller的场景并不多,但是很多大家所熟知的控件在内部都是使用Scroller来实现的,如ViewPager、ListView...首先在ScrollerLayout的构造函数里面我们进行了上述步骤中的第一步操作,即创建Scroller的实例,由于Scroller的实例只需创建一次,因此我们把它放到构造函数里面执行。...当然就目前这一个例子来讲,我们只是借助它来学习了一下Scroller的基本用法,例子本身有很多的功能点都没有去实现,比如说ViewPager会根据用户手指滑动速度的快慢来决定是否要翻页,这个功能在我们的例子中并没有体现出来

    1.6K60

    weex-20-scroller组件

    本节学习目标 掌握scroller组件的使用 概念 scroller> 是一个竖直的,可以容纳多个排成一列的子组件的滚动器。...如果子组件的总高度高于其本身,那么所有的子组件都可滚动 使用途径 如果我们想要根组件也可以滑动的效果,就可以使用scroller>组件 水平滚动的视图 多个滚动视图嵌套 注意事项 1.滑动组件默认方向为垂直...2.支持任意类型的 Weex 组件作为其子组件(除了cell组件,它只能用于list) 3.可以使用组件 和 组件 4.垂直时,当子标签的高度没有超过scroller...scroller class="scroller" show-scrollbar='true' scroll-direction='horizontal' > 注意 1.如果你给scroller...loadmore 事件 scroller class="scroller" show-scrollbar='true' scroll-direction='vertical' @loadmore="

    1.2K20

    View的位置参数及其Scroller类的理解

    } } Scroller类其实是一个在自身中存储各种运动参数的类,并没有关于真正滑动的功能,实现滑动的是scrollTo(x,y)可以理解是在他类的内部进行的滑动设想:你现在这个类中给他一个关于滑动的理想轨迹...(从一个坐标,到另一个坐标和间隔时间),然后scroller根据这些进行规划(根据时间流逝的百分比算出应该滑动到的坐标),在重绘触发的回调函数computeScroll()中再滑动到置顶的位置scrollTo...(scroller.getCurrX(),scroller.getCurrY())。...总结一下就是,Scroller并不能实现View的滑动,它需要配合View的computeScroll()方法才能实现弹性滑动的效果,它不断让View重绘,而每一次重绘都会导致View进行进行小幅度滑动...,而多次小幅度滑动就组成了弹性滑动,这就是Scroller的原理。

    61740

    Android 中 View 的滑动

    Ok,下面来看一下那两个方法的升级版:Scroller 类。在上面的滑动中,效果是瞬间完成的,在 APP 中,这种效果会给人一种非常突兀的感觉。...Scroller 类正是为了给 View 的滑动添加动画效果产生的。...一般来说,使用 Scroller 类要有下面三个步骤: 1、初始化 Scroller 类的对象:Scroller scroller = new Scroller(context) 2、重写要滑动的...,这个方法还有一个重载版本,多了一个参数用于控制滑动时间 下面我们仍然以上面的那个例子做些改变来看一下 Scroller 类的用法: 因为要处理触摸事件,因此我们新建一个类继承 LinearLayout...成功的实现了滑动效果! 不知道小伙伴们发现没有,在这里实现的滑动都是对当前控件的全部的子 View 进行滑动,这样在一定程度上限制了滑动的灵活性。那么我们如何处理单个 View 的滑动呢?

    93940

    高级 UI 成长之路 (一) View的基础知识你必须知道

    **Scroller** Scroller 用于实现 View 的弹性滑动。...我们知道,当使用 View 的 scrollTo / scrollBy 方法进行滑动时,其过程是瞬间完成的,没有一个过渡的效果体验是不友好的,那么这个时候就可以借助 Scroller 来实现过渡效果的滑动...Scroller 本身无法让 View 弹性滑动,它需要和 View 的 computeScroll 方法配合使用才能共同完成这个功能。那么如何使用 Scroller 呢?...通过延时策略 该小节我们继续介绍另一种实现弹性滑动的效果,即延时策略,它的核心思想是通过发送一系列延时消息从而达到一种渐近式的效果,代码如下: val MESSAGE\_SCROLLER\_TO...2.高仿 ViewPage [9596ecec3fab23334db79ea0f026a1c8.gif] 下面就以 Scroller 来实现一个简版的 ViewPager 效果,要实现 Scroller

    83510

    【Android】手把手教你上滑解锁的效果

    实现思路 这个效果的实现思路主要围绕手指触屏事件展开,注意点如下: 以ACTION_DOWN和ACTION_UP的Y轴距离差与自定义的滑动阈值作比较来判断是否上滑 借助Scroller类,触发LinearLayout...Scroller类中有computeScroll方法,它能实现流畅滚动的原因是,它将初始位置和目标滑动位置之间的距离分成N份依次调用scrollTo方法,通过postInvalidate在每次调用scrollTo...方法后刷新视图,以此来达到流畅滑动的效果,其实ViewPager、ScrollView等控件都是通过Scroller来实现流畅滑动的。...Scroller的简单实用参考这里。 阻尼滑动 什么是阻尼滑动?我们先来看看这张图: ?...: private Scroller mScroller = new Scroller(context); // 重写computeScroll @Override public void computeScroll

    2.7K20

    自定义View基础(二)View的滑动

    Android 自定义View View的滑动 ---- 在移动设备上,滑动基本是基础特性。不管是用的最多的下拉刷新还是ViewPager,他们的基础都是滑动。...View的滑动实现方法也是绚丽的自定义View的基础知识。...by是基于参数的相对滑动,而to是制定位置的决定滑动。 需要注意的是这两个方法只能改变View内容的位置而不能改变View在布局中的位置。...2、View滑动三种方式的对比 scrollTo/scrollBy:操作简单,但是局限明显,适合对View内容的滑动 动画:操作简单,由于现在基本上都是3.0以上版本Android系统,所有可以适合几乎所有情况...改变布局参数:操作稍微复杂,适用于几乎所有情况 3、弹性滑动和实现的三种方式 3.1使用Scroller 再看一遍Scroller的套路代码: Scroller scroller = new Scroller

    46420
    领券