我的代码有效,但它没有给我我想要的东西。我需要在视图滚动的整个持续时间内执行代码。所以,即使我使用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;
}
答案 0 :(得分:4)
我使用WebView玩了一下,并没有找到跟踪滚动的方法,但你肯定需要它作为WebView吗?如果您使用的是ListView或GridView,则可以实现ListView.OnScrollListener方法,尤其是onScrollStateChanged
和onScroll
。前者特别有用,因为它可以为您提供列表正在执行的操作的更新,即使您的用户“抛出”列表的具体示例也会在此后继续滚动一段时间。您将如何跟踪该示例的示例:
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;
}
}
}
我直接从谷歌提供的代码示例中解脱出来,例如“Api Demos”项目中的List13。如果您想仔细研究一下,请转到File - >将其导入Eclipse。新 - > Android项目,从现有源创建项目,然后导航到(您的SDK文件夹)/ platforms /(您正在使用的版本)/ samples / ApiDemos。如果找不到,则在设置SDK时可能没有下载示例应用程序。您可以通过转到Window - >在Eclipse中完成此操作。 Android SDK和AVD Manager,然后在左侧的“可用包”下。
答案 1 :(得分:1)
我认为您可能希望使用View而不是Activity执行此操作。 View有一个名为onScrollChanged
的方法听起来像你想要的。如果不是这样,您可能还想查看同一类的computeScroll
,scrollBy
和scrollTo
方法。
答案 2 :(得分:1)
尝试以下方法
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
}
它会在滚动后为您提供最后滚动的位置和新的滚动位置。