1

我正在尝试将画布视图添加到水平滚动视图内的相对布局中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#fff"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/hsv"
        android:layout_width="fill_parent"
        android:background="#EEDB00"
        android:layout_height="30mm">

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/canvas"
            android:background="#000"
            android:layout_width="300mm"
            android:layout_height="20mm">
        </RelativeLayout>

    </HorizontalScrollView>
</RelativeLayout>

我创建了一个名为 CanvasView 的类,它扩展了 View,并通过覆盖 onDraw() 绘制了一些基本形状。但是,当我这样做时,画布不会出现在相对布局中:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        cView = new CanvasView(this);
        rLayout = (RelativeLayout)this.findViewById(R.id.canvas);
        rLayout.addView(cView);
    }

但是,当我通过调用setContentView(cView);它直接添加它时。在挖掘时,我发现当我调用时addView()onDraw()根本没有触发,因此没有绘制画布......关于如何解决这个问题的任何想法?

4

1 回答 1

2

我目前无法自己测试,但我认为您的问题是您没有将任何 LayoutParams 应用于视图,这可能意味着它不占用屏幕空间。如果 View 离开屏幕或完全被遮挡,或者系统决定它所绘制的任何内容都不可见,那么我相信 onDraw() 根本不会被调用。

尝试在将视图添加到 RelativeLayout 时为其设置一些宽度和高度:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50,50);
rLayout.addView(cView, params);    
于 2011-10-10T09:36:10.520 回答