Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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 如何获取滚动视图的当前Y偏移量_Android - Fatal编程技术网

Android 如何获取滚动视图的当前Y偏移量

Android 如何获取滚动视图的当前Y偏移量,android,Android,ScrollView有一个设置x和y滚动偏移的方法,但没有获取当前偏移的方法(我真正感兴趣的是y偏移,因为ScrollView只支持垂直滚动)。我看不到任何方法可以在超类中工作,并尝试对内容视图使用getTop(),该视图始终为零。我遗漏了什么吗?关于:和。在ScrollView上调用getScrollY() 有关文档,请参见此处:如果您确定在使用getScrollY()或getTop()后应该获得一些值,请尝试将这些方法放在 yourScroolView.post(new Runnable()

ScrollView有一个设置x和y滚动偏移的方法,但没有获取当前偏移的方法(我真正感兴趣的是y偏移,因为ScrollView只支持垂直滚动)。我看不到任何方法可以在超类中工作,并尝试对内容视图使用getTop(),该视图始终为零。我遗漏了什么吗?

关于:和。

在ScrollView上调用
getScrollY()


有关文档,请参见此处:

如果您确定在使用getScrollY()或getTop()后应该获得一些值,请尝试将这些方法放在

yourScroolView.post(new Runnable() {
@Override
public void run() {
    Toast.makeText(getApplicationContext(),"Current Y is : "+getScrollY,Toast.LENGTH_SHORT).show();
            }
        });

现在应该可以了。根据我对这个方法的理解,它只会在绘制布局之后运行。这可能是您以前一直获得0的原因之一。希望能有所帮助。

我通过以下几点实现了目标。首先得到屏幕的高度和宽度

DisplayMetrics metrics = getResources().getDisplayMetrics();
float screenWidth = metrics.widthPixels;
float screenHeight = metrics.heightPixels;
然后找出文档高度(总数、显示内容和屏幕外内容)

最后得到偏移量

public float getTopY(){
    return (getDocumentHeight() * computeVerticalScrollOffset())/computeVerticalScrollRange();
}
这将为您提供相对于所看到文档部分的窗口顶部,以便您可以通过以下方式找到事件的确切位置:

public boolean onTouchEvent(MotionEvent event) {
      int y = event.getY() + (int) getTopY();
    }

您也可以做一些类似于处理宽度的操作

为什么不试试这样的操作

targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            int scrollX = targetScrollView.getScrollX();
            Log.d(TAG, "scrollX: " + scrollX);
        }
    });

这些方法是受保护的,因此只有在您对ScrollView进行子类化时才可以访问。谢谢,克里斯蒂安,您的解决方案帮助了我。我已经从ScrollView中获得了一个子类视图。应该使用侦听器setOnScrollViewListener()计算它。还有一个使用getScrollY()的第一个解决方案是正确的。我想知道我的scrollView是否在使用周期性增加的内容(如日志视图)包装textView时显示了最后一行文本。这就做到了:
boolean lastLineVisible=scrollView.getScrollY()+scrollView.getHeight()+100>=textView.getHeight()
অস্থির সল্যুশন, 惊人的解决方案。。。。谢谢,我喜欢你的解决方案。经过6年的Android应用开发,我终于找到了解决方案。
targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            int scrollX = targetScrollView.getScrollX();
            Log.d(TAG, "scrollX: " + scrollX);
        }
    });