方法一:

用setOnScrollListener(new AbsListView.OnScrollListener())来实现,判断滑动后显示的第一个条目 ,与滑动前的第一个条目的大小来判断,

这种方法逻辑简单,但是必须要滑动到当前第一条目隐藏后才能起作用,当listview的单个条目的高度很大时,这种方法就不好使了。代码如下:

lv_shiti_content.setOnScrollListener(new AbsListView.OnScrollListener() {
boolean scrollFlag=false;//标记是否滑动
boolean isFirst=true;//标记第一次进入,因为第一次进来lastVisibleItemPosition默认为0,
// 此时如果listview的第一个显示的条目不是第一个(下表为0),则往下滑也会出现firstVisibleItem>lastVisibleItemPosition的情况
//所以第一次进入时不做操作,第二次进来已经给lastVisibleItemPosition赋值,就可以判断了
int lastVisibleItemPosition;//标记上次的显示位置
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==1||scrollState==2){
//其中1 表示滑动,等同于 AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
// 2 表示惯性滑动 等同于 AbsListView.OnScrollListener.SCROLL_STATE_FLING
scrollFlag=true;
}else{
scrollFlag=false;
}
} @Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(!isFirst){ if(firstVisibleItem>lastVisibleItemPosition){
//执行向上滑动时要做的逻辑
}
lastVisibleItemPosition=firstVisibleItem;//记录当前条目
isFirst=false;
} }
});

方法二:

使用setOnTouchListener(new View.OnTouchListener()方法,这种方法,只要有一点移动距离就可以判断。

特别说明:android控件的事件传递时是默认直接传递到最里层,只有在上下滑动的时候才会中断事件,所以我们获取到的第一个事件是move事件。

而我们的逻辑也是在move事件中做的,这就造成获取的lasty和movey的值是相同的(看下面代码)

所以我们要判断,只有第一次进来的时候获取lasty。以后都是lasty直接记录当前的movey。不然每次的lasty和movey永远是相同的值。

lv_shiti_content.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(isFirstClick){//只有第一次进来的时候用获取位置的方法给lastY赋值,后面的值都是上一次的move坐标
//如果不做此判断,每次的lasty和movey是相同的值,这是因为在此处获取的的y值其实就是move的值,
//是因为在listview中,down事件是默认传递进去给条目的,在此处无法响应down事件。
lastY=event.getY();
isFirstClick=false;//初始值是true,此处置为false。
}
switch (event.getAction()){
case MotionEvent.ACTION_MOVE:
float moveY = event.getY();
Log.e("moveY_START",moveY+"");
if(moveY< lastY){
if(!NewPageisOpen){//初始值为false ,由于move方法会不断调用,为防止多次打开页面。
Intent intent = new Intent(getActivity(), ShitidianTestActivity.class);
startActivity(intent);
NewPageisOpen = true;
}
}
lastY=moveY;
break;
}
return false;
}
});

判断listview是上滑还是下滑的方法的更多相关文章

  1. js判断手指的上滑,下滑,左滑,右滑,事件监听

    原理:1:当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和staerY: 2:当触发touchmove事件的时候,再获取此时手指的横坐标moveEndX和纵坐标moveEn ...

  2. touch监听判断手指的上滑,下滑,左滑,右滑,事件监听

    判断滑动的方向和距离,来实现一定的效果,比如返回上一页等等 <body> <script> $(function(){ //给body强制定义高度 var windowHeig ...

  3. vue中使用触摸事件,上滑,下滑,等

    第一步,下载一个包 npm install kim-vue-touch -s 在当前项目中下载包 第二部 import vueTouch from 'kim-vue-touch' Vue.use(vu ...

  4. js监听事件 上滑消失下滑出现的效果 触摸与手势事件

    https://www.w3cmm.com/javascript/touch.html //触摸与手势事件连接tinyscrollbar //方法1var _this = $('#fabu');var ...

  5. vue js判断长按触发及手指的上滑、下滑、左滑、又滑

    <span class="btn" @touchstart="touchstart()" @touchmove="touchmove()&quo ...

  6. NestedScrollView嵌套RecycleView 滑动 实现上滑隐藏 下滑显示头部效果

    废了好大的劲才弄好的,记下来 方便以后查看 public class MainActivity extends AppCompatActivity { private RecyclerView mRe ...

  7. RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)

      RecyclerView 给我们的可以检测滑动事件的接口 只有 一个方法 recyclerview.setOnScrollListener()或者 recyclerview.addOnScroll ...

  8. iOS 上滑隐藏导航,下滑显示导航,仿斗鱼导航效果

    UItableView或 UIcollectionView 都是继承UIScrollView 滑动的时候,判断是上滑还是下滑 使用 UIScrollView 的代理方法 func scrollView ...

  9. Android的ListView分页功能(上滑加载更多)

    今天主要工作是将之前实现的各种ListView显示全部信息,优化成了每次加载几条数据,然后上滑的时候加载更多,底部显示一个进度条和一个文字提示,然后加载完毕后,将提示信息隐藏. 一边看教学视频一遍敲代 ...

随机推荐

  1. Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

     定时任务就是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求. 一.Timer和TimerTask  Timer和Tim ...

  2. Java基础之创建窗口——使用网格布局管理器(TryGridLayout)

    控制台程序. 网格布局管理器可以在容器的矩形网格中布局组件. import javax.swing.*; import java.awt.*; import javax.swing.border.Et ...

  3. 使用MJExtension中要注意的地方

    MJExtension git地址  https://github.com/CoderMJLee/MJExtension#JSON_Model Model contains model-array[模 ...

  4. JS和JQUERY的区别

    ①.根据ID取元素 { JS:取到的是一个DOM对象. 例:var div = document.getElementByID("one"); JQUERY:取到的是一个JQUER ...

  5. 结合DDE指标来分析成本分布的重要作用

    筹码分布集中度90和70是什么意思? (2015-08-14 12:12:27) 转载▼ 标签: 股票 分类: 成交量能.筹码分析   那个集中度90,和集中度70,90和70是什么意思??集中度最大 ...

  6. Java中几种日志方案

    .本文记录Java中几种常用的日志解决方案 0x01 Log4j .这应该是一个比较老牌的日志方案了,配置也比较简单,步骤如下 1)添加对应依赖,比如 Gradle 中 dependencies { ...

  7. 树形DP+贪心(乱搞)(HDU4714)

    题意:给出一个树形图,要求把该树形成一个环最少的步骤(断开一条边和形成一条边都需一步) 分析:很明显,要想把树形成一个环,就要先把其分裂成m条子链之后把子链形成环需要的步骤是2*m+1,所以只需要m最 ...

  8. csuoj 1390: Planting Trees

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1390 1390: Planting Trees Time Limit: 1 Sec  Memory ...

  9. org.openqa.selenium.WebDriverException: f.QueryInterface is not a function Command duration or timeout:

    今天偶遇一个问题,运行项目时,发现这个问题: org.openqa.selenium.WebDriverException: f.QueryInterface is not a functionCom ...

  10. HDU 4888 Redraw Beautiful Drawings(最大流+判最大流网络是否唯一)

    Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited ...