我有一个自定义视图,可以实现onMeasure
,onSizeChanged
和onDraw
。
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld){
super.onSizeChanged(xNew, yNew, xOld, yOld);
Log.v(TAG, "Measures arrived "+xNew+","+yNew);
}
@Override
protected void onDraw(Canvas canvas) {
Log.v(TAG, "Time to draw, canvas size "+canvas.getWidth()+","+canvas.getHeight());
}
我将它添加到容器中:
container.addView(customView, new LayoutParams(LayoutParams.MATCH_PARENT, 50)); // fixed height, 50px
我的问题是,我不明白为什么有时Canvas
尺寸与onSizeChanged
中的尺寸不匹配,一旦视图已经确定为最终尺寸。
具体来说,在提议的用例中,只关注身高,我得到:
为什么 OnDraw的画布高度报告整个屏幕?是否可能因为层次结构中的较高层可能会有clipChildren(false)
?
注意:我的意思是"有时会发生这种情况"是这个视图是一个非常一般的视图(从头开始的自定义textview
),我在非常不同的地方使用:内部scrollviews,内部适配器,深层嵌套等。
答案 0 :(得分:1)
使用canvas.getClipBounds()
应该给出合适的尺寸,即使画布宽度和高度实际上更大。