listview滑动距离
来源:互联网 发布:淘宝上的lolita代购 编辑:程序博客网 时间:2024/05/17 03:09
计算listview滑动的距离以及滑动listview改变titlebar透明度效果
获取listview的滑动距离是关键
(1)listview设置滑动监听
mListView.setOnScrollListener
(2)重写onScroll()方法
先不要看代码,先看代码后面的说明
package com.dgtech.getlistviewscrollheight;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.SparseArray;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends AppCompatActivity {SparseArray recordSp = new SparseArray(0);//设置容器大小,默认是10int mCurrentfirstVisibleItem;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(new MyAdapter()); listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mCurrentfirstVisibleItem = firstVisibleItem; View firstView = view.getChildAt(0);//获取当前最顶部的item if (firstView != null) { ItemRecod itemRecord = (ItemRecod) recordSp.get(firstVisibleItem); if (itemRecord == null) { itemRecord = new ItemRecod(); } itemRecord.height = firstView.getHeight();//获取当前最顶部Item的高度 itemRecord.top = firstView.getTop();//获取对应item距离顶部的距离 recordSp.append(firstVisibleItem, itemRecord);//添加键值对设置值 System.out.println("mCurrentfirstVisibleItem: " + mCurrentfirstVisibleItem + "itemRecord.height: " + itemRecord.height + "itemRecord.top: " + itemRecord.top);// int ScrollY = getScrollY(); System.out.println("ScrollY: " + ScrollY); } } });}//下面这个方法是获取listview滑动距离的方法private int getScrollY() { int height = 0; for (int i = 0; i < mCurrentfirstVisibleItem; i++) { ItemRecod itemRecod = (ItemRecod) recordSp.get(i); if (itemRecod != null) { height += itemRecod.height; } } ItemRecod itemRecod = (ItemRecod) recordSp.get(mCurrentfirstVisibleItem); if (null == itemRecod) { itemRecod = new ItemRecod(); } return height - itemRecod.top;}private class ItemRecod { int height = 0; int top = 0;}//下面随便写了个adapter,不用看class MyAdapter extends BaseAdapter{ private TextView textView; @Override public int getCount() { return 100; } @Override public Object getItem(int position) { TextView textView = new TextView(MainActivity.this); textView.setText("ceshi"); return textView; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(MainActivity.this); textView.setText("ceshi"); return textView; }}}
说明:
程序刚加载日志打印:
02-06 10:57:18.578 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: mCurrentfirstVisibleItem: 0itemRecord.height: 57itemRecord.top: 002-06 10:57:18.578 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: ScrollY: 0
这个时候listview还没有滚动,第一个可见条目id是0
滑动一点点:
02-06 11:01:21.438 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: mCurrentfirstVisibleItem: 0 itemRecord.height: 57itemRecord.top: -4102-06 11:01:21.438 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: ScrollY: 41
再滑动一点点:
02-06 11:02:12.248 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: mCurrentfirstVisibleItem: 0 itemRecord.height: 57itemRecord.top: -4902-06 11:02:12.248 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: ScrollY: 49
再滑动一点点:
02-06 11:21:05.898 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: mCurrentfirstVisibleItem: 1 itemRecord.height: 57itemRecord.top: -1702-06 11:21:05.898 12040-12040/com.dgtech.getlistviewscrollheight I/System.out: ScrollY: 74
注意观察什么改变什么没有变
每个item的高度肯定不会变,变化的是当前item距离顶端的距离
画图说明:
随着滑动listview,mCurrentfirstVisibleItem这个值也会跟着改变.然后我们发现规律:
listview滑动的距离就是已经滑动过去的item的高度总和(这个总和的意思是,比如当前mCurrentfirstVisibleItem这个值是0,说明还没有item滑动过去,这个mCurrentfirstVisibleItem值为1说明item0这个item已经滑动过去了)加上当前第一个可见item距离顶部的距离(绝对值)
说的比较拗口,需要理解
当listview的高度都获取了之后,可以根据这个高度值的变化做很多事情,比如改变某个控件的透明度,是否显示某个控件等,这里不再赘述
0 0
- 获取Listview滑动距离
- ListView监听滑动距离
- listview滑动距离
- android listview 计算滑动距离
- Android listview垂直滑动指定距离
- Android listview垂直滑动指定距离
- listview得到滑动距离像素的方法
- Android listview指定垂直滑动距离
- Android - ListView滑动指定tiem和滑动固定距离
- android 标题动态变换(listview scrollview 滑动距离计算)
- Android(UI篇) 获取ListView的滑动距离
- 小距离监听ListView或者ScrollView上下滑动
- android Listview头部带控件滑动距离的判断
- 关于RecyclerView与ListView控件滑动距离的计算方法
- 如何监听listview的滚动事件——获取listview有效滑动的距离
- 获取ListView在Y轴的精确滑动距离(单位px)
- 得到ListView的滑动距离来设置上方菜单的透明度变化
- Scrollview的滑动距离
- ngx_openresty安装笔记
- oracle数据库的导入导出
- 关于c/c++中的isdigit()函数
- STM32之SystemInit()函数的探讨
- C# 数组、ArrayList、List、Dictionary的用法与区别
- listview滑动距离
- Ubuntu环境下简单配置vim
- 跨平台的线程休眠函数
- 将字符串转换为UTF-8编码
- Android UI之沉浸式状态栏Translucent System Bar
- python3.4学习的点点滴滴、不断的积累
- CODE[VS] 天梯 1205 单词翻转
- 关于memcache权限的问题
- 端口占用