回顾Listview 获取Listview中指定的item的veiw

需求:取到listview中指定的item的veiw.

listview的item是可以复用的直接按位置去取是不可能的.因为只有在屏幕显示的item才有自己的view.

这时候可以使用OnScrollListener经过简单的计算取到指定的view.

如何取第10个item的view?

1,取的指定view必须在屏幕中显示

2,取得时候是根据指定view在屏幕中的位置取得(当前屏幕显示的item 从0开始计算,即使有100个item,但是屏幕只能显示10个,最大值就是9)

示例:

//这一个item要取出它的view
int i = 10;

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                LogUtil.d("-------------------------------------------------");
                LogUtil.d("firstVisibleItem--->" + firstVisibleItem);//当前第一个可见的item
                LogUtil.d("visibleItemCount--->" + visibleItemCount);//当前屏幕中有几个可见的item
                
                 //目标出现 i是真实的item位置 
                if (i == firstVisibleItem + visibleItemCount - 1) {
                 //取出目标item的view  
                   View childAt = lv.getChildAt(visibleItemCount - 1);
                }
                //使用item的view做一些效果
                if (childAt != null && firstVisibleItem + 1 <= i) {
                    int top = childAt.getTop();
                  //当目标出现的时候 才带出特定的view 
                  //scrollTo并不会实际移动view 点击会造成bug 采用属性动画很合适啊!!! 
                    sbBrandHall.setTranslationY(top);
                } else if (firstVisibleItem + 1 > i) { //第一条可见item大于目标了,完全展示 因为滑动快的时候取不到值
                    sbBrandHall.setTranslationY(0);
                }
                // 如果滑动过快 保证显示和隐藏正常
                if (i < firstVisibleItem + visibleItemCount) {
                    sbBrandHall.setVisibility(View.VISIBLE);
                } else {
                    sbBrandHall.setVisibility(View.GONE);
                }
            }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值