Android:如何判断视图是否正在滚动
在iPhone中,这很简单——每个视图都有一个scrollViewDidScroll方法。我正试图在安卓系统中找到类似的功能 我的代码可以工作,但它不能满足我的需求。我需要在视图滚动的整个过程中执行代码。因此,即使我使用OnEstureListener的onScroll方法,它也只在手指在屏幕上时触发(它的名称并不正确,应该称为“onSlide”或“OnSweep”,重点是手势而不是UI动画)。如果用户轻弹视图,并且在用户抬起手指后,视图仍在滚动几分钟,则它不会继续启动 是否有在滚动的每一步都调用的方法Android:如何判断视图是否正在滚动,android,scroll,webview,Android,Scroll,Webview,在iPhone中,这很简单——每个视图都有一个scrollViewDidScroll方法。我正试图在安卓系统中找到类似的功能 我的代码可以工作,但它不能满足我的需求。我需要在视图滚动的整个过程中执行代码。因此,即使我使用OnEstureListener的onScroll方法,它也只在手指在屏幕上时触发(它的名称并不正确,应该称为“onSlide”或“OnSweep”,重点是手势而不是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;
}
我认为您可能希望以视图而不是活动来完成此操作。视图有一个名为
onScrollChanged
的方法,听起来像是您想要的。如果不是这样,您可能还想查看同一类的computeScroll
、scrollBy
和scrollTo
方法。我在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演示”项目中的List13。如果您想更仔细地了解这一点,请转到File->New->Android Project将其导入Eclipse,从现有源代码创建项目,然后导航到(您的SDK文件夹)/平台/(您正在使用的版本)/samples/ApiDemos。如果找不到,则在设置SDK时可能没有下载示例应用程序。您可以在Eclipse中通过进入窗口->Android SDK和AVD管理器,然后在左侧的“可用软件包”下执行此操作。尝试以下方法
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
}
它将为您提供滚动后的最后一次滚动位置和新的滚动位置。谢谢。。。。这些网络视图的行为似乎与任何其他Android视图完全不同。这是我在这个论坛上提出的第二个问题,结果是:“这是有道理的,但WebView似乎是正常Android约定的一个未经记录的例外。”非常令人沮丧。当心网络视图!