4

我有一个带有 webview 和一个按钮的布局。该按钮是可见的,但一旦滚动 web 视图就会变得可见。我正在使用 ViewTreeObserver,但由于某种原因,未调用 onScrollChanged。我是否误解了 onScrollChanged 的​​调用方式?

this.licenseAgreementView = (WebView) findViewById(R.id.licenseAgreementView);
ViewTreeObserver observer = this.licenseAgreementView.getViewTreeObserver();
observer.addOnScrollChangedListener(new OnScrollChangedListener() {
    public void onScrollChanged() {
    makeButtonVisible();
    }
});
4

2 回答 2

6

在我的情况下,我必须将 GlobalLayoutListener 附加到我的 scrollView,然后在 LayoutChanged 上我必须添加 scrollListener。

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                observer.removeOnGlobalLayoutListener(this);
            } else {
                observer.removeGlobalOnLayoutListener(this);
            }
            observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    //Your code here
                }
            });
        }
    });

这对我有用。

于 2015-09-01T13:55:56.913 回答
1
    final View scrollView = findViewById(R.id.scrollView);

    final ViewTreeObserver.OnScrollChangedListener onScrollChangedListener =
            new ViewTreeObserver.OnScrollChangedListener() {

        @Override
        public void onScrollChanged() {

            //your code here -->
            makeButtonVisible();

        }

    };


    scrollView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            ViewTreeObserver observer = scrollView.getViewTreeObserver();
            observer.addOnScrollChangedListener(onScrollChangedListener);
            return false;

        }

    });

试试这个,对我有用。

于 2014-01-22T16:31:32.067 回答