android之用scrollview实现控件滑动固定效果

项目中最近用到需要布局滑动到某一个地方的时候某个控件固定在屏幕顶部不动,就去研究了下,思路其实挺简单的。我置顶的悬浮控件上边还需要留个控件,比如搜索框之类的,项目需求不一样就留的不一样,所以就研究了一下,网上也有很多,其实方法思路都一样的,很简单,自定义一下ScrollView就可以了。

借鉴来自:点击打开链接

然后自己就写了下,效果图如下:


哎哟,废话说多了心口疼,不废话了直接开始吧,首先我们每次做一个功能前需要分析怎么实现,我们要的步骤:

(1)需要知道这个scrollview滑动了多少,因为我们是根据滑动距离来判断是否让绿色那个框停在当前页的上面,那么我们需要滑动多少才让他停下来呢?看下图:

我们需要:手指上滑时当绿色框的顶部从位置3滑动到位置2时就停靠在位置2那里了;下滑时绿色框的顶部到达位置2的时候停靠的绿色框不停靠

(2)怎么停靠?我们可以让整个界面布局使用relativelayout,让搜索那个框在最上面,然后需要停靠的绿色框隐藏在搜索框下面,简而言之就是2个绿色框了,一个是在scrollview里面即上图中看见的绿色框(简称内部绿色框),一个是在搜索栏下面隐藏着的(简称外部绿色框),当我们此时上滑时,内部绿色框从位置3到位置2我们就显示外部绿色框;反之隐藏

(3)获取位置3到位置2的距离distance,然后与scrollview滑动的距离scrollY进行比较,如果scrllY大于或等于distance,那么就说明我们从位置3滑动到了位置2或者位置2的上面,那么我们就需要显示外部绿色框,如果小于说明还没到达位置2,那么我们就不显示外部绿色框

好了,说了这么多应该能听懂吧,你要是听不懂。。。。。。。。好吧,怪我咯,说不清楚,我的错。下面那就直接开始代码吧

首先自定义MyScrollView获取滑动的距离利用scrollview的getscrollY方法获取滑动的距离,那有人就问了,既然scrollview有这个方法,为什么要重写呢,直接在外面用scrollview.getScrollY()不就行了。那么。。。可以是可以,但是大锅,我们需要随时获取他的高度,而不是我们执行一次getScrollY就获取一次,我们需要在滑动过程中随时随地获取他的高度来进行比较,不然你在外面用scrollview.getScrollY()方法,怎么写?用handler每x毫秒获取一次?那也许恰好在你2次获取的间隔中我到达了位置2呢,而且你的handler什么时候开始执行?什么时候不执行,还有如果我瞬滑(别问我瞬滑是谁,你问静静去)呢,那我手指离开了但是scrollview还在滑动怎么办。。。不废话了,懂了吧,所以我们需要在scrollview的onTouchEvent方法中监听他的touch事件,只要你要滑动,那你肯定要touch这个scrollview,所以我们在他的onTouchEvent方法中获取滑动距离是最好的,只要onTouchEvent方法被触发那就执行getscrollY(),还要加一个特殊情况,如果手指离开了,即ACTION_UP,那么我们需要隔一会儿就获取一下距离,然后跟手指离开时的距离进行比较,如果不一样,那就说明手指放开后还滑动了,那就

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值