如何为视图设置移动侦听器

时间:2017-02-19 14:58:44

标签: android android-view android-gesture android-touch-event

我必须倾听特定视图的位置变化。视图可以是任何位置,例如,它可以是列表视图或回收器视图的项目,或者它可以是滚动视图或嵌套滚动视图等的子项。但是每当视图屏幕中的位置已更改时(每当x,y坐标正在更新),我需要得到通知。我试过了

view.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View view, int i, int i1, int i2, int i3) {
            Log.d(TAG, "Position changed");
        }
    });

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Log.d(TAG, "Layout changed");
        }
    });

但似乎无法正常工作

我也试过了GestureDetectorCompat,但在投掷过程中,x,y位置并不准确。

我的问题有什么解决方案吗?希望我的问题很明确。提前致谢!!

1 个答案:

答案 0 :(得分:1)

我认为您可以使用ViewTreeObserver.OnScrollChangedListener回调。这是在滚动视图树中的某些内容时调用的回调。因此,请尝试为正在移动的视图添加此侦听器。

view.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            // Do what you want to do when the view has been scrolled
        }
    });