我有一個ListView,必須一次顯示4個項目。我必須一個一個滾動一個項目。ListView滾動 - 一個接一個
用戶滾動ListView後,我必須重新調整滾動以適合4個項目。我的意思是,我不能展示一個項目的一半。
另一個問題,有沒有什麼辦法可以得到當前ListView的scrollY偏移?因爲listView.getScrollY()方法來自View,但不是ListView中的Scroller對象。
我有一個ListView,必須一次顯示4個項目。我必須一個一個滾動一個項目。ListView滾動 - 一個接一個
用戶滾動ListView後,我必須重新調整滾動以適合4個項目。我的意思是,我不能展示一個項目的一半。
另一個問題,有沒有什麼辦法可以得到當前ListView的scrollY偏移?因爲listView.getScrollY()方法來自View,但不是ListView中的Scroller對象。
您可以在ScrollView上實現傳感器「OnTouchListener」。 然後技術是不滾動,直到人沒有至少一個項目的高度sc ler。代碼 例如:然後
scroll.setOnTouchListener(new OnTouchListener()
{
private int mLastY;
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: //the user places his finger on the screen
mLastY=(int)event.getY(); //to get the "y" position starting
break;
case MotionEvent.ACTION_MOVE:
if(mLastY-event.getY() >= theSizeOfItem) //if a movement of the size of an item occurs
{
scroll.scrollTo(0, scroll.getScrollY()+ theSizeOfItem));
scroll.invalidate();
mLastY=(int)event.getY(); //reset the starting position to the current position
}
if(event.getY()-mLastY >= theSizeOfItem) //if a movement of the size of an item occurs
{
scroll.scrollTo(0, scroll.getScrollY() - theSizeOfItem));
scroll.invalidate();
mLastY=(int)event.getY(); //reset the starting position to the current position
}
break;
default:
break;
}
return v.onTouchEvent (event); //to use other sensors (OnClick, OnLongClick, ...)
}});
必須實現在滾動到達終點的情況下!對不起,我的英文,我希望它能幫助你
我發現了一個很好的解決方案。它適用於我。 可能是我的回答會幫助別人。
class ScrollListener implements AbsListView.OnScrollListener{
boolean aligned;
@Override
public void onScrollStateChanged(AbsListView absListView, int state) {
if (state == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
aligned = false;
}
if (state == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
if (!aligned) {
if (Math.abs(absListView.getChildAt(0).getY()) < Math.abs(absListView.getChildAt(1).getY())) {
listView.smoothScrollToPosition(absListView.getFirstVisiblePosition());
} else {
listView.smoothScrollToPosition(absListView.getLastVisiblePosition());
}
}
aligned = true;
}
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
}
我必須說,在我的情況我有兩個明顯的項目,因此,如果你有4,你應該使用索引("getChildAt(0)" and "getChildAt(1)")
玩。 祝你好運!
檢查此[回答](http://stackoverflow.com/a/18133295/2977976)以獲得平滑的滾動效果 – HMG
是的,它可以這樣工作,謝謝。但ScrollView不使用適配器。在我的場景中,我必須使用適配器與ListView,因爲我需要一個無限循環,並且它更容易使用適配器。與ListView的問題是,你不能得到它的scrollY實數偏移量。如果我瞭解您的問題,請致電 – rlecheta
。解決方法是使用帶有適配器的GridView,以便您獲得精確的位置值。 –