我目前正在與功能類似於羅馬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