2010-07-24 73 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); 
     } 
    }); 
相關問題