您的位置:首页 > 移动开发 > Android开发

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

2017-06-21 09:22 726 查看

最简单的方式实现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);
}


源码

代码实在是太简单了,就不上传了,详见下一篇,扩展篇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐