2011-07-20 69 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); 
} 
相关问题