ListView 获取精确滚动值

ListView 获取精确滚动值

@[Android|listview|滚动]
场景

当我们要求listview一往上滚动的时候,下面的tab栏或者别的在下面浮空的东西,或者上面的ActionBar也是可以要求往上滚动(例如google plus),这个时候我们需要精确的ListView 滚动值,而不某个Item往上滚动了,毕竟是用了卡片设计后会出现一行会很高的情况,这时候过了一个在往下滑动明显就不合适了

获取的方法很简单看代码

package org.hangox.test;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.lidroid.xutils.util.LogUtils;

import java.util.ArrayList;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
 * Created With Android Studio
 * User 47
 * Date 2014-10-28
 * Time 23:27
 */
public class ListViewScrollTest extends ActionBarActivity{
    @InjectView(R.id.listView)
    ListView listView;
    View headView ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_scroll);
        ButterKnife.inject(this);
        ArrayList<String> stringArrayList = new ArrayList<String>();
        for(int i = 0 ;i < 10000; i ++){
            stringArrayList.add(i+"");
        }
        listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, stringArrayList));
        headView = new TextView(this);
//        listView.addHeaderView(headView);
        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) {
                LogUtils.i(getScrollY()+"");
            }
        });
    }

    public int getScrollY() {//获取滚动距离
        View c = listView.getChildAt(0);
        if (c == null) {
            return 0;
        }

        int firstVisiblePosition = listView.getFirstVisiblePosition();
        int top = c.getTop();

        int headerHeight = 0;
        if (firstVisiblePosition >= 1) {
            headerHeight = listView.getHeight();
        }
        return -top + firstVisiblePosition * c.getHeight() + headerHeight;
    }
}

不要问我为什么,只是知道这样可以获取到滚动距离,但是具体原因还没有分析

转载于:https://www.cnblogs.com/Jabba93/p/4059497.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值