带阻尼回弹效果的RecyclerView

博客讲述了在Android开发中如何实现RecyclerView的阻尼回弹效果。通过拒绝使用`android:overScrollMode="always"`来简单解决问题,作者分享了在避免引入额外库的情况下,如何通过在OverScrollView中嵌套RecyclerView并监听滑动事件来达到需求,同时提到针对项目要求不能引入第三方框架的情况。
摘要由CSDN通过智能技术生成

一、前提

接到新需求,要求列表滑动过程增加阻尼回弹效果,且即使列表不能填充一整个屏幕的情况下也支持滑动。

有人说,给RecyclerView加上 android:overScrollMode="always" 就行了,事实证明,NO!这个东西只是在滑动到边缘是多了个水波阴影而已,没有阻尼回弹。

又有人说,给ListView加上 android:overScrollMode="always" 就行了,经过尝试,貌似可以,但是有bug,还相当严重。况且我还要把RecyclerView改成ListView,太麻烦了。

本着不重复造轮子的前提,搜索了一大波。github上面也有很多现成的框架,不过由于项目要求,不能随便引入框架,所以不敢直接depend,本来想copy源码改吧改吧,后来发现这些框架做的都很“大”,冗余功能代码量多,索性放弃。后来终于找到一个简单的实现方式。借鉴作者思路,继续修改使之符合我的功能要求。站在巨人的肩膀上会让成功来的更快!

二、直接上代码:

package com.zzz.test.view.widget;

import android.content.Context;
import android.graphics.Rect;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;

/**
 * @author xxx
 * @date 20-4-29
 */
public class OverScrollLayout extends LinearLayout {

    private static final int ANIM_TIME = 400;

    private RecyclerView childView;

    private Rect original = new Rect();

    private boolean isMoved = false;

    private float startYpos;

    /**
     * 阻尼系数
     */
    private static final floa
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值