ListView滚动监听
来源:互联网 发布:云计算和传统的区别 编辑:程序博客网 时间:2024/05/21 12:47
先展示效果:
布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.eg.lyx.listviewdemo.MainActivity"> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:text="标题" android:textColor="#e21b1b" /> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none"/></LinearLayout>
代码:
package com.eg.lyx.listviewdemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.util.SparseArray;import android.view.MotionEvent;import android.view.View;import android.widget.AbsListView;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;import static android.R.attr.data;import static android.R.attr.y;public class MainActivity extends AppCompatActivity { private TextView tv; private ListView lv; private List<String> data = new ArrayList<>(); private int lastVisibleItemPosition = 0; private int mLastFirstPostion = 0; private int mLastFirstTop; private int touchSlop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); lv = (ListView) findViewById(R.id.lv); initData(); lv.setAdapter(new MyAdapter(MainActivity.this, data)); // 还有一种方法,直接给ListView设置onTouchListener,在MOVE事件去判断这一次的y坐 // 标和上一次的y坐标大小关系从而进行判断,但是这样有个缺陷就是,当我们手指快速滑 // 动然后抬起的情况下,这时候ListView并没有马上停止仍会自动滑一段距离,而此时回调 // 却因为MOVE事件的不再产生无法继续执行回调。 lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_IDLE://停止滑动时 break; case SCROLL_STATE_TOUCH_SCROLL://正在滚动 break; case SCROLL_STATE_FLING: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { int currentTop; View firstChildView = view.getChildAt(0); if (firstChildView != null) { currentTop = view.getChildAt(0).getTop(); } else { //ListView初始化的时候会回调onScroll方法,此时getChildAt(0)仍是为空的 return; } //判断上次可见的第一个位置和这次可见的第一个位置 if (firstVisibleItem != mLastFirstPostion) { //不是同一个位置 if (firstVisibleItem > mLastFirstPostion) { //TODO do down// Log.i("cs", "--->down"); int firstVisiblePosition = view.getFirstVisiblePosition(); Log.i("cs", "firstVisiblePosition--->" + firstVisiblePosition); tv.setText(data.get(firstVisiblePosition) + " DOWN"); } else { //TODO do up// Log.i("cs", "--->up"); int firstVisiblePosition = view.getFirstVisiblePosition(); Log.i("cs", "firstVisiblePosition--->" + firstVisiblePosition); tv.setText(data.get(firstVisiblePosition) + " UP"); } mLastFirstTop = currentTop; } else { //是同一个位置 int firstVisiblePosition = view.getFirstVisiblePosition(); Log.i("cs", "firstVisiblePosition--->" + firstVisiblePosition); if (Math.abs(currentTop - mLastFirstTop) > touchSlop) { //避免动作执行太频繁或误触,加入touchSlop判断,具体值可进行调整 if (currentTop > mLastFirstTop) { //TODO :do up// Log.i("cs", "equals--->up"); } else if (currentTop < mLastFirstTop) { //TODO :do down// Log.i("cs", "equals--->down"); } mLastFirstTop = currentTop; } } mLastFirstPostion = firstVisibleItem; } }); } private void initData() { for (int i = 0; i < 20; i++) { data.add("卡片" + i); } }}
阅读全文
1 0
- ListView滚动状态监听
- ListView滚动监听
- 监听ListView的滚动事件
- ListView 滚动监听 可见区域
- 监听ListView滚动到最底部
- 监听ListView滚动到最底部
- 监听ListView滚动到最底部
- 监听ListView滚动到最底部
- 监听ListView滚动到最底部
- 对ListView滚动状态的监听
- 监听ListView滚动到最底部
- 对ListView滚动状态的监听
- 监听ListView滚动到最底部
- 监听ListView是否滚动到顶部
- 监听ListView滚动到最底部
- listview精确监听向上向下的滚动
- Android 监听listview滚动状态。头部、尾部
- 给listView添加滚动事件监听
- [My SQL] 使用SELECT检索数据
- sed常用方法
- const修饰符
- 从request对象中获取请求json格式的参数
- 阿里Canal部署安装小白教程
- ListView滚动监听
- 系统学习深度学习(三十)--BiLSTM
- make 2>&1 | tee log.txt 命令解析
- HttpServletRequest
- 获取所有库的大小
- 队列的实现
- if else与switch区别
- dd大牛的《背包九讲》
- 2017百度之星Astar资格赛 1001度度熊保护村庄