Android 自定义视图';s可绘图区域包括其他领域

Android 自定义视图';s可绘图区域包括其他领域,android,view,ondraw,Android,View,Ondraw,我有一个自定义视图,有点像一个垂直进度条。这只是一个自定义视图,在画布上绘制,用完成百分比从下到上填充。在我的xml中,自定义控件上面有文本,下面有文本(有两个,一个在左边,一个在右边,这里是右边): 到目前为止,我已经尝试在布局中反转视图,因此顶部文本是第一个(顶部对齐),底部文本是第二个(底部对齐),自定义控件是最后一个(底部文本上方的布局),同时包含匹配父内容和换行内容,但都没有效果。我试着改成线性布局,但仍然没有更好的结果 在代码中显示的情况下,显示顶部文本,但底部文本消失。当我更改顺序

我有一个自定义视图,有点像一个垂直进度条。这只是一个自定义视图,在画布上绘制,用完成百分比从下到上填充。在我的xml中,自定义控件上面有文本,下面有文本(有两个,一个在左边,一个在右边,这里是右边):

到目前为止,我已经尝试在布局中反转视图,因此顶部文本是第一个(顶部对齐),底部文本是第二个(底部对齐),自定义控件是最后一个(底部文本上方的布局),同时包含匹配父内容和换行内容,但都没有效果。我试着改成线性布局,但仍然没有更好的结果

在代码中显示的情况下,显示顶部文本,但底部文本消失。当我更改顺序,使自定义视图位于底部文字上方的layout_时,它只是将绘图区域向上移动,使底部文字可见,但覆盖了顶部文字。请注意,当我说底部文字消失时,我的意思是消失,而不仅仅是掩盖。我的最后一次测试是将布局高度硬编码为布局中的“350dp”

在所有情况下,我总是在这个特定的设备上得到489的高度,即使高度是硬编码的。我想不出我需要做些什么才能让屏幕的中间部分成为我可以画的东西,而不去管其他部分。是否假定自定义视图是布局中的最后一项?我唯一能做到这一点的方法是更改顺序,使自定义视图在布局中最后一个,以便自定义区域的底部位于底部文本的顶部,底部文本仍然显示,然后手动将大约150添加到顶部(即不要在提供给onDraw()的画布上写入零)所以它不包括最上面的文本。幸运的是,我正在绘制的图形是半透明的,因此我可以看到文本是否被覆盖或刚刚消失

有没有人有更多关于这是如何工作的信息?我对我所做的解释是否比实际问题更令人困惑

谢谢,
gb

有人建议离线时,不要只将自定义字段放在其他字段的“上方”或“下方”,而是将这两个字段都放在上面。将其作为XML中的最后一项,并将其设置为上面的
android:layout\u
和下面的
android:layout\u
。我做到了,现在我的身高正确了。

你创建了自己的onMeasure()吗?不,我也要看看。今天早上在XML中修复了它。
    <RelativeLayout android:layout_width="150dp"
        android:layout_height="fill_parent" android:layout_alignParentRight="true">
        <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/bar_right_text" android:text="Right"
android:layout_alignParentTop="true" android:gravity="center_horizontal" />
        <com.myApp.VBarView android:id="@+id/right_bar"
            android:layout_width="match_parent"
                    android:layout_height="match_parent"
                        android:layout_below="@id/bar_right_text"/>
        <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/bar_right_time_text" android:text="Time Remaining" android:layout_below="@id/right_bar" android:gravity="center_horizontal" />
    </RelativeLayout>
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    // h here is 489
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    int myHt = getHeight();
    int myMeasHt = getMeasuredHeight();
    Rect canvasRct = canvas.getClipBounds();
    // all of these (myHt, myMeasHt, and canvasRct.getHeight()) are all 489
}