我已经编写了一个自定义视图,我想确保在任何屏幕尺寸上都可以查看。
我已经覆盖了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
中,但现在parentHeight
包含在onMeasure
中}出现为0。
我已经将自定义视图的超类从View
更改为ScrollView
,希望能够轻松赢得继承滚动功能,但这种情况并没有发生,所以我只能尝试找到一种方法来获取ScrollView
功能以使用我的自定义视图,或编写自己的滚动功能。
有人有什么建议吗?我已经看过this post on Large Image Scrolling Using Low Level Touch Events,并且如果我被迫自己编写,我会复制一些功能,但无论如何都会欣赏正确方向的推动。
答案 0 :(得分: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);
}