首页 > 其他分享 >ListView - 仿照IOS拉到上下底部仍可继续拉并自动回弹

ListView - 仿照IOS拉到上下底部仍可继续拉并自动回弹

时间:2023-02-01 12:31:46浏览次数:47  
标签:回弹 density int IOS mCtx attrs context ListView mMaxYOverscrollDistance


PART_ONLY 自定义类继承 ListView,覆写 ​overScrollBy()​

public class CListView extends ListView {

private static final int MAX_OVERSCROLLY_DISTANCE = 200;

private Context mCtx;
private int mMaxYOverscrollDistance;

public CListView(Context context) {
super(context);
mCtx = context;
initBounceListView();
}

public CListView(Context context, AttributeSet attrs) {
super(context, attrs);
mCtx = context;
initBounceListView();
}

public CListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mCtx = context;
initBounceListView();
}

private void initBounceListView() {
// get the density of the screen and do some maths with it on the max overscroll distance
// variable so that you get similar behaviors no matter what the screen size

final DisplayMetrics metrics = mCtx.getResources().getDisplayMetrics();
final float density = metrics.density;

mMaxYOverscrollDistance = (int) (density * MAX_OVERSCROLLY_DISTANCE);

/**
* @author WangYehan
*
* @desc 上面的mMaxYOverscrollDistance有点问题,直接改成MAX_OVERSCROLLY_DISTANCE效果才出来。。
*/
mMaxYOverscrollDistance = MAX_OVERSCROLLY_DISTANCE;
}


@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
/**
* @author WangYehan
*
* @desc 摩擦摩擦
*/
if (!isTouchEvent) { // 禁止惯性滑动
if ((scrollY < 0 && deltaX < 0) || (scrollY > getHeight() && deltaX > 0)) {
deltaY = 0;
}
}
// This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, (deltaY + 1) / 2, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
}
}

以上。如有错误和疑问,欢迎指正提出。


标签:回弹,density,int,IOS,mCtx,attrs,context,ListView,mMaxYOverscrollDistance
From: https://blog.51cto.com/u_15950249/6031356

相关文章

  • TS 封装 Axios
    前言Axios的二次封装是一项基础工作,主要目的就是将一些常用的功能进行封装,简化后续网络请求的发送。JS版本的封装大家都已经非常熟悉了,可以信手拈来。但是使用 TypeSc......
  • Axios的使用
    导入axios.js的脚本:<scriptsrc="js/axios.js"></script>对于get方式:直接在url后面添加参数和值<script>axios({method:"get",url:"http://loc......
  • Axios发送AJAX请求(通用方法型ajax)
    视频HTML<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><t......
  • 无声音频 空白音频 ios后台运行保活
    1为了实现后台定时器继续循环 用到了 https://blog.csdn.net/qq_38520096/article/details/102626210用播放音频的方法播放无声音频实现2功能实现了但是没找到无声音......
  • 自学iOS开发,你必须要知道的“五心”和“三多”
      随着网络的普及,手机应用程序开发越来越受到人们的重视,很多有兴趣的小伙伴就开始跃跃欲试想要大显身手,自己试着也开发一个属于自己的app,那么,如何才能掌握一套有效、快速......
  • Vue+axios+Servlet上传并显示图片
    做了和重写summernote插入图片的回调函数并上传图片到服务器一样的事,但是servlet简介:summernote点击上传(或粘贴)图片,前端用axios以multipart/form-data的形式传到后端,servl......
  • flutter Listview physics常见子类
    ListView的physics是ScrollPhysics类:其常见子类有BouncingScrollPhysics :允许滚动超出边界,但之后内容会反弹回来。ClampingScrollPhysics :防止滚动超出边界,夹住 。......
  • Bootstrap Modal 在iOS设备(iPhone/iPad)中无法正常弹出显示的问题及解决方法
    最近在用Bootstrapmodal的时候,遇到了在iOS设备上无法正常显示的问题。上网查了一下,在Github找到一个类似的问题。基本上是因为把Modal组件放在responsivetable中了,所......
  • 提高程序员工作效率的工具合集windows+ios
    提示:集合各种程序员必备工具,望学习收藏~文章目录​​前言​​​​一、Markdowm​​​​1:菜单栏​​​​2:文件​​​​3:编辑​​​​4:段落​​​​5:格式​​​​6:视图​​​......
  • Nagios 配置工具 Nconf
    安装参考:​​http://www.nconf.org/dokuwiki/doku.php?id=nconf:help:documentation:start:installation​​#下载解压wgethttps://sourceforge.net/projects/nconf/files......