我目前正在与功能类似于罗马Nurik的粘性滚动型技术在这里片段后屏幕上:安卓:获取ListView项位置布局
http://code.google.com/p/romannurik-code/source/browse/misc/scrolltricks
不过,我想用一个ListView使用它,让它粘在屏幕的顶部和底部。我已经有点成功通过顶部两个隐藏的意见和屏幕的底部,并且具有列表时,正确的项目使用以下到达顶部或底部取消隐藏:
//Similar to Roman's Stick ScrollView
@Override
public void onScrollChanged() {
if(scrollListen){
if(mMovingClock != null && mMovingClock.getTop() <= list.getTop()){
//Log.i("DraftSync", "View at " + String.valueOf(mMovingClock.getTop()));
clockTop.setVisibility(View.VISIBLE);
}else {
clockTop.setVisibility(View.INVISIBLE);
}
if(mMovingClock != null && mMovingClock.getBottom() >= list.getBottom()){
clockBottom.setVisibility(View.VISIBLE);
}else {
clockBottom.setVisibility(View.INVISIBLE);
}
}
}
问题我的意思是,如果我的目标列表项目(mMovingClock)是片段开始显示在屏幕上的初始项目之一,则list.GetTop()方法将返回零。我已经广泛地搜索,并明白,这是因为它是衡量它,它在适当的位置在屏幕上呈现过,但我能够scrollListen,我觉得它应该是:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_draft, container, false);
list = (ObservableListView)rootView.findViewById(R.id.draft_queue);
list.setCallbacks(this);
...
list.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
onScrollChanged();
scrollListen = true;
}
});
return rootView;
}
我想我正确下面的例子中,但在正确测量mMovingClock之前,将scrollListen设置为true。任何人都可以找出为什么这个视图总是返回0为getTop()和getY(),直到它滚动屏幕一次?之后,一切都很好。
有什么建议吗?
感谢, 乔希
不幸的是,这种方法没有奏效。电话似乎延迟了,但仍然发生得很快。另外,我还必须将run()方法添加到新的Runnable中才能使其运行。 – Josh
我为每次onGloballayout运行添加了一个日志事件,并且每次它返回0为我试图查找的视图位置。我甚至试着移动布尔切换键来切换第一次触摸屏幕,但视图仍然返回0.任何想法为什么视图3在列表上位置将返回0为getTop()和getY()? – Josh