2011-07-20 101 views
2

我寫了一個自定義視圖,我希望確保在任何屏幕尺寸上均可查看。如何在Android自定義視圖中實現滾動

我已經覆蓋了onMeasure:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 

    this.setMeasuredDimension(parentWidth, parentHeight); 
} 

,這似乎很好地工作當視圖小於屏幕。然而,有時候,自定義視圖比屏幕大,我打算爲較小的屏幕尺寸,所以我包的自定義視圖在ScrollView,但現在在onMeasureparentHeight出來爲0

我已將自定義視圖的超類從View更改爲ScrollView,希望能夠輕鬆獲得繼承滾動功能的勝利,但這並未發生,因此我仍試圖找到一種使ScrollView功能與我的工作方式自定義視圖或編寫我自己的滾動功能。

有沒有人有任何建議?我見過this post on Large Image Scrolling Using Low Level Touch Events,如果我被迫寫我自己的東西,我會去複製其中的一些功能,但是不管怎樣,我都會喜歡在正確的方向上微調。

+0

你設置爲父'ScrollView'的佈局屬性是什麼? – rds

回答

1

原來,答案很簡單。我離開了ScrollView並改變了我的onMeasure。需要注意的是,雖然Android會提供寬度,但它不會給我提供一個高度,最初令人困惑。爲了獲得視圖以填充可用空間,我抓住了父視圖的可見矩形。代碼完整(希望它可以幫助其他人有同樣的問題):

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight; 

    if(isLandscape()) { 
     Rect r = new Rect(); 
     ((ScrollView)getParent()).getGlobalVisibleRect(r); 
     parentHeight = r.bottom - r.top; 
    } else { 
     parentHeight = (int) Util.getViewHeight(); 
    } 

    this.setMeasuredDimension(parentWidth, parentHeight); 
} 
相關問題