android - 如何为 View 设置移动监听器

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

我必须监听特定 View 的位置变化。 View 可以在任何地方,例如,它可以是 ListView 或回收器 View 的项目,也可以是 ScrollView 或嵌套 ScrollView 等的 subview 。但是每当 View 在屏幕中的位置发生更改时(每当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,但是在fling期间,x,y位置不准确。

我的问题有解决办法吗?希望我的问题很清楚。提前致谢!!

最佳答案

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

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

关于android - 如何为 View 设置移动监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42328742/

相关文章:

android - 有没有办法让 TextView 使用 Spinner 样式?

java - 在 Android 上使用哪个 SVM 库?

android - TCP 套接字连接作为服务

android - 更新 ListView 页脚

android - 如何在android中以编程方式获取应用程序大小?

android - 在 subview 中处理 BACK 键事件,而不是在 Activity 中

android - 滑动删除列表项

android - 向 subview 添加手势监听器而不隐藏父级的触摸事件

java - 如果我不访问该应用程序,则不会收到通知

java - 试图从 ShoutCast 中分离元数据