2010-03-19 93 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) { 
} 

它会给你滚动后的最后一个滚动位置和新的滚动位置。

相关问题