如何获得ScrollView的当前Y偏移量

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

Solutions Collecting From Web of "如何获得ScrollView的当前Y偏移量"

在ScrollView上调用getScrollY()。 在这里看到更多的细节: http : //developer.android.com/reference/android/view/View.html#getScrollY%28%29

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

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

现在它应该工作。 根据我对这个方法的理解,它只会在布局被绘制之后运行。 这可能是你以前不断得到0的原因之一。 希望能帮助到你。

你为什么不尝试这样的事情?

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

那么: computeHorizontalScrollOffset()computeVerticalScrollOffset()

我通过以下来实现。 首先得到屏幕的高度和宽度。

 DisplayMetrics metrics = getResources().getDisplayMetrics(); float screenWidth = metrics.widthPixels; float screenHeight = metrics.heightPixels; 

然后找出文档高度(总数,显示内容和屏幕外的内容)

 public float getDocumentHeight(){ return (computeVerticalScrollRange() * screenHeight)/computeVerticalScrollExtent(); } 

最后得到抵消

 public float getTopY(){ return (getDocumentHeight() * computeVerticalScrollOffset())/computeVerticalScrollRange(); } 

这给你的窗口顶部相对于你看到的文件的一部分,所以你可以find一个事件的确切位置

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

你也可以做一些类似的处理宽度