需求:做项目的时候,需要将ListView的header的一个Tab卡位,即listView滑动后,Header的某一个部分可以定在ListView的顶端卡住。
解决的方案:监听ListView的滑动,滑动的过程中得不断的获得header里面View的精准位置坐标,开始用的是View.getY()这个函数,但是后来发现这个方法是API11之前都不能用,
最后发现利用View.getLoactionInWindow()这个方法就解决问题了。
listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub int[] locationTab = new int[2]; int[] locationView = new int[2]; // 获得listview的Header里面tab与顶端的动态距离 dongTab.getLocationInWindow(locationTab); //主要是获得标题栏的高度 view.getLocationInWindow(locationView); int headerHeight = locationView[1]; System.out.println("locationDong[1]***" + locationTab[1] + "**headerHeight**" + headerHeight + "**firstVisibleItem**" + firstVisibleItem); if (headerHeight <= locationTab[1] && firstVisibleItem <= 1) jingTab.setVisibility(View.GONE); else jingTab.setVisibility(View.VISIBLE); } });