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>

View を拡張する CanvasView というクラスを作成し、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

現時点ではこれを自分でテストする立場にはありませんが、View に LayoutParams を適用していないことが問題だと思います。つまり、画面スペースを占有していない可能性があります。View が画面外または完全に隠されている場合、または描画するものが何も表示されないとシステムが判断した場合、 onDraw() はまったく呼び出されないと思います。

RelativeLayout に追加するときに、View に幅と高さを設定してみてください。

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