2010-03-19 59 views
3

,這很簡單---每個視圖都有一個scrollViewDidScroll方法。我正試圖在Android中找到相應的功能。Android:如何判斷一個視圖是否在iPhone中滾動

我的代碼有效,但它並沒有給我我想要的東西。我需要在視圖滾動的整個持續時間內執行代碼。所以,即使我使用OnGestureListener的onScroll方法,它只會在手指在屏幕上時觸發(它並不是真正命名的 - 它應該被稱爲「onSlide」或「onSwipe」,側重於手勢而不是UI動畫)。如果用戶彈動視圖並且在用戶擡起手指後仍然滾動片刻,它不會繼續觸發。

是否有一種方法在滾動的每一步都被調用?

public class Scroll extends Activity implements OnGestureListener { 

public WebView   webview; 

public GestureDetector gestureScanner; 

public int   currentYPosition; 
public int   lastYPosition; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    webview = new WebView(this); 
    setContentView(webview); 
    webview.loadUrl("file:///android_asset/Scroll.html"); 

    gestureScanner = new GestureDetector(this); 

    currentYPosition = 0; 
    lastYPosition = 0; 

} 


public boolean onTouchEvent(final MotionEvent me) { 
    return gestureScanner.onTouchEvent(me); 
} 


public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    // I do stuff here. 
    return true; 
} 

回答

4

我用WebView玩過一點點,沒有找到跟蹤滾動的方法,但是您是否確實需要它成爲WebView?如果您使用的是ListView或GridView,則可以實現ListView.OnScrollListener方法,特別是onScrollStateChangedonScroll。前者是特別有用的,因爲它可以讓您更新列表正在執行的內容,即使您的具體示例中的用戶正在「拋出」列表,並且在之後的某段時間內仍會繼續滾動。你將如何跟蹤一個例子:

public class List13 extends ListActivity implements ListView.OnScrollListener { 

(...) 

    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     switch (scrollState) { 
     case OnScrollListener.SCROLL_STATE_IDLE: 
      //List is idle 
      break; 
     case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: 
      //List is scrolling under the direct touch of the user 
      break; 
     case OnScrollListener.SCROLL_STATE_FLING: 
      //The user did a 'fling' on the list and it's still scrolling 
      break; 
     } 
    } 
} 

我舉的是直出的代碼樣本谷歌提供的,例如List13在「API示範」項目。如果你想仔細看看,可以進入文件 - >新建 - > Android項目,從現有源創建項目,並導航到(你的SDK文件夾)/平臺/(你的版本使用)/ samples/ApiDemos。如果您找不到它,您可能在設置SDK時未下載示例應用程序。您可以通過轉至Window - > Android SDK和AVD Manager,然後在左側的「Available Packages」下執行此操作。

+1

謝謝....這些WebViews似乎完全不同於任何其他Android視圖。這是我在這個論壇上提出的第二個問題,它導致了:「這是有道理的,但WebView似乎是正常的Android約定中沒有記錄的例外。」非常令人沮喪。謹防WebViews! – Dave 2010-04-09 17:27:01

1

我想你可能想用View而不是Activity來做到這一點。視圖有一個名爲onScrollChanged的方法,聽起來像你想要的。如果不是這樣,您可能還想查看同一類的computeScroll,scrollByscrollTo方法。

1

試試下面的方法

@Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
} 

它會給你滾動後的最後一個滾動位置和新的滾動位置。

相關問題