Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何判断视图是否正在滚动_Android_Scroll_Webview - Fatal编程技术网

Android:如何判断视图是否正在滚动

Android:如何判断视图是否正在滚动,android,scroll,webview,Android,Scroll,Webview,在iPhone中,这很简单——每个视图都有一个scrollViewDidScroll方法。我正试图在安卓系统中找到类似的功能 我的代码可以工作,但它不能满足我的需求。我需要在视图滚动的整个过程中执行代码。因此,即使我使用OnEstureListener的onScroll方法,它也只在手指在屏幕上时触发(它的名称并不正确,应该称为“onSlide”或“OnSweep”,重点是手势而不是UI动画)。如果用户轻弹视图,并且在用户抬起手指后,视图仍在滚动几分钟,则它不会继续启动 是否有在滚动的每一步都调

在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约定的一个未经记录的例外。”非常令人沮丧。当心网络视图!