2

onDraw()最初に、メソッドをオーバーライドして自分自身を描画するカスタム ビューを作成しました。大量のビューを作成する必要があったため、これは非現実的であることが判明しました。そのため、メソッドを使用してそれぞれの子を描画するカスタム ViewGroup を作成しましたonLayout()

子ビューがメソッドを実装する必要があることをAndroidのドキュメントで読みましたlayout()。しかし、私が作成した子ビューは、onDraw メソッドを使用して自分自身を描画します。これをどのように処理すればよいですか?メソッドを削除する必要がありonDraw()ますか?そして、メソッドがどのように機能するか、およびメソッドをメソッドにlayout()「変換」する方法の例を誰か教えてもらえますか?onDraw()layout()

私の現在のonDraw()方法は次のようになります。

protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        //Draw Border.
        canvas.drawRect(mCellBounds, mBorderPaint);

        //Draw Background.
        canvas.drawRect(mBackgroundBounds, mBackGroundPaint);

        //Draw Value if not 0.
        if(Value != 0)
            canvas.drawText(Integer.toString(Value), ValueX, ValueY, mNumberPaint);

        //Draw Notes if Value == 0.
        else
        {
            for(int i = 0 ; i < 9 ; i++)
                if(NoteList[i])
                    canvas.drawText(Integer.toString(i), NoteX + ((i%3) * NoteMeasureX), NoteY + ((i/3) * NoteMeasureY), mNotePaint);
        }
    }
4

2 に答える 2

5

そこで、onLayout() メソッドを使用してそれぞれの子を描画するカスタム ViewGroup を作成しました。

ViewGroupメソッドで の子をどのように描画するかわかりませんonLayout。このメソッドは、子を画面に配置するために使用する必要があります。

子ビューが layout() メソッドを実装する必要があることをAndroidのドキュメントで読みました

そのメソッドは既に実装されています。適切な値で呼び出すとView、画面上のどこに配置する必要があるかがわかります。

onDraw() メソッドを削除する必要がありますか?

実際に何かを見たい場合は、onDrawメソッドを無視しないでください。

そして、layout() メソッドがどのように機能するか、および onDraw() メソッドを layout() メソッドに「変換」する方法の例を教えてください。

onDrawメソッドをメソッドに変換しませんlayoutViewGroup例として、 customと custom child で構成される小さなサンプルを作成しましたView。下の画像のように 2 つ (予想される子) を配置するカスタムViewGroup(各子は親の半分の幅と高さになります):

カスタム ViewGroup

ここでサンプルを見つけることができます。お役に立てば幸いです。また、SDK レイアウト ( simple などFrameLayout) のソース コードを見て、それらがどのように機能するかを確認することもできます。

于 2012-12-20T11:04:26.580 に答える
1

ビュー階層全体が本当に必要ですか? SurfaceViewの使用を検討してください。これは、カスタム描画を行うためのはるかに軽量な方法であり、すべてを 1 つのビューで他のビューに簡単に埋め込むことができます。

こちらの私の回答も参照してください。

于 2012-12-19T22:37:15.150 に答える