2010-07-24 60 views
28

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

回答

1
+4

这些方法受到保护,因此只有在继承ScrollView的情况下才可以访问。 – 2011-05-11 14:56:40

+0

谢谢,克里斯蒂安,你的解决方案对我有帮助。我已经有了ScrollView的子类视图。它应该使用监听器setOnScrollViewListener(http://www.nicholasmelnick.com/entries/104)进行计算。 getScrollY()的第一个解决方案也适用。 – CoolMind 2015-11-02 15:31:38

46

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

+1

我想知道我的scrollView是否包含一个带有周期性增长内容(如日志视图)的textView,显示了文本的最后一行。这样做:'布尔lastLineVisible = scrollView.getScrollY()+ scrollView.getHeight()+ 100> = textView.getHeight()' – 2015-07-02 01:17:42

4

如果你确信你应该使用getScrollY()或共达()后得到一些价值,尽量把这些方法里面

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

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

0

我通过以下获得。首先获取屏幕高度和宽度。

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(); 
} 

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

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

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

2

你为什么不尝试这样的东西吗?

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