Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一)

最简单的方式实现ListView 拉出回弹效果,阻尼效果

  • 首先说一下坑
  • 简介
  • 实现

首先说一下坑

Android 9 之后才新增的API.

简介(overScrollBy方法,只要带滑动的都有此方法)

 1. 在View中增加了overScrollBy方法,用于记录x, y 轴上滚动的距离
 2. 在AbsListView的onTouchEvent中判断是否到达边界(顶部 或 底部) ,然后调用view.overScrollBy ,传入 mScrollY等参数
 3. overScrollBy 最终赋值给View的mScrollX, mScrollY 两个变量
 4. 在AbsListView中调用完overScrollBy之后,调用invalidate重绘

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考[Github][2].

实现(以ListView为例)

第一步:继承ListView,重写overScrollBy方法

说明:系统在此方法中没有做任何实现,只是实现了监听,自从5.0之后,Android官方加入了水泼纹效果,滑动到顶部或底部会出现水波纹效果。之所以没有做成和IOS下拉回弹那样的效果,是为了规避侵权。但是此方法其实已经做了实现。

public class PullToListView extends ListView{

    private int mMaxOverScrollY = 200;//默认200

    public PullToListView(Context context) {
        super(context);
    }

    public PullToListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PullToListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    /**
     * 设置最大的回弹距离
     * @param maxOverScrollY
     */
    public void setMaxOverScrollY(int  maxOverScrollY){
        this.mMaxOverScrollY = maxOverScrollY;
    }

    /**
     *
     * @param deltaX  继续滑动x方向的距离
     * @param deltaY  继续滑动y方向的距离     负:表示顶部到头   正:表示底部到头
     * @param scrollX x方向滑动的距离
     * @param scrollY y方法滑动的距离
     * @param scrollRangeX
     * @param scrollRangeY
     * @param maxOverScrollX x方向最大可以滚动的距离
     * @param maxOverScrollY y方向最大可以滚动的距离
     * @param isTouchEvent 是手指拖动滑动     false:表示fling靠惯性滑动;
     * @return
     */
    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY,
                maxOverScrollX, mMaxOverScrollY, isTouchEvent);
    }

源码

代码实在是太简单了,就不上传了,详见下一篇,扩展篇

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值