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);
    }

源码

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

你可能感兴趣的:(Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一))