通过回弹效果理解Scroller

1.写在前面

通过整个博客以及例子的布局回弹效果理解以及搞清楚以下几个点:
1. Scroller的使用(这里学习了谷歌的小弟 这个大神的,在他的博客中学到了很多关于Scroller知识,但是因为他水平太高,很多初级的东西没讲解,所以通过打断点以及写log弄明白很多未知的知识);
2. GestureDetector.OnGestureListener中onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)方法中参数的意义;
3. scrollTo以及scrollBy的区别以及scrollTo使用时总是感觉方向错了;
4. Scroller.getFinalY()以及Scroller.getCurrY()非常实在的意思,并不是很抽象的最后的位置以及当前位置的解释;
5. 布局回弹效果的理解;
这里写图片描述

2.干货

A. 都说scrollTo移动的并不是view而且view里面的内容,但是使用时内容总是会往相反的方向跑,这里那位大佬已经解释的非常清楚了,不是本文的重点直接上图了
这里写图片描述
scrollTo和scrollBy的区别直接举例子,假设布局的初始位置是(0,0),我要将布局向下移动30,则应该是scrollTo(0,-30),但是这里我们使用scrollBy(0,-30)也是样的效果,因为初始位置是0,scrollBy就算是累加的也没用,加的是0,但是在当前位置,我还想要布局往下30,则可以再使用scrollBy(0,-30),但是如果还是使用scrollTo(0,-30)则不行,如果要使用scrollTo则应该是scrollTo(0,-60),这样子说应该很好理解了,因为scrollBy(x,y)是把初始位置加上x,y,而scrollTo(x,y)则是跳到x,y位置。


B. 剩下的都要通过回弹这个例子来理解了。首先对于这个回弹效果要知道可以分为两部分,第一是下拉,整个布局下移,第二是松开手,布局上移。因为整个布局是继承RelativeLayout的,对于第一部分,看到的随着手指下拉,布局下移其实是通过scrollTo使布局移动的。
对于手势的监听,这里使用class GestureListenerImpl implements GestureDetector.OnGestureListener,对于里面onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 参数的理解很重要,
还是用这个代码测试下点击这里 代码如下

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        Log.d(TAG, "onScroll: " + e1.toString()+"    "+e2.toString()+"    distance-->"+distanceX+"  "+distanceY);
        Log.d(TAG, "e1 y--->" + e1.getRawY() + "  " + e1.getY() + "   e2 y-->" + e2.getRawY() + "  " + e2.getY());
        return true;
    }

然后只是手指在屏幕上滑动,并不快速“抛”,得到如下图结果:
这里写图片描述
因为篇幅原因,并不能很好的看清楚,我整理其中的两个好好看下,如下

MainActivity: onScroll: 
MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=632.4144, y[0]=896.533, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=97336748, downTime=97336748, deviceId=2, source=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值