0

を使用して子ビューを追加または削除することにより、子ビューを作成してアニメーション化されたトランジションを示す Google のこのビデオに出会いました。onClick学習プロセスの一環として: コードを取得し、分解し、いくつかの変更を加えました (私はコピー アンド ペースト プログラマーではありません)。

私の質問は、作成時に子ビューに やその他のさまざまな要素をTextView追加するにはどうすればよいですか?Button

(興味がある場合は、Google からプロジェクトをダウンロードしてください:完全なプロジェクト)

これが私の活動で私が持っているものです:

/**
 * Custom view painted with a random background color and two different sizes which are
 * toggled between due to user interaction.
 */
public class ColoredView extends View {

    private boolean mExpanded = false;

    private LinearLayout.LayoutParams mCompressedParams = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, 50);

    private LinearLayout.LayoutParams mExpandedParams = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, 200);

    private ColoredView(Context context) {

        super(context);

        int red = (int)(Math.random() * 128 + 127);
        int green = (int)(Math.random() * 128 + 127);
        int blue = (int)(Math.random() * 128 + 127);
        int color = 0xff << 24 | (red << 16) |
                (green << 8) | blue;
        setBackgroundColor(color);

        setLayoutParams(mCompressedParams);


        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Size changes will cause a LayoutTransition animation if the CHANGING transition is enabled
                setLayoutParams(mExpanded ? mCompressedParams : mExpandedParams);
                mExpanded = !mExpanded;
                requestLayout();

            }
        });
    }
}

onCreateアニメーションを表示する方法にもこれがあります

LayoutTransition transition = eventContainer.getLayoutTransition();
    transition.enableTransitionType(LayoutTransition.CHANGING);

これは、LinearLayoutすべての子ビューが作成される XML です。

<LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:animateLayoutChanges="true"
            android:id="@+id/eventContainer">
    </LinearLayout>

ボタンまたは edittext を linearlayout に追加すると、まったく新しいビューとして扱われ、1 つのオブジェクトのみが許可されます。その 1 つのレイアウトにオブジェクトの束を叩きつける方法はありますか?

また、ビューとレイアウトを取得するという概念についても少し混乱していcontextます...おそらく、ここのどこかで誤用したのでしょう。

4

1 に答える 1

1

少なくとも現在のコードではできません。

あなたのColoredViewクラスは現在 を拡張していますがView、これは独自の子ビューを持つことをサポートしていません。子ビューを追加する場合は、拡張するクラスViewGroup(または ViewGroup のサブクラスのいずれか) を作成する必要があります。

クラスが extendsViewGroupしたら、メソッドを使用してaddView()ビューを追加し、渡すことでそれらを整列させることができますLayoutParams(ビューが複雑な配置を必要とする場合は、カスタムを作成することもできますLayoutParams)。

于 2013-05-19T20:48:23.303 に答える