0

我在 google 上看到了这个视频,它演示了通过使用onClick添加或删除子视图来创建子视图的动画过渡。作为学习过程的一部分:我将代码分解,并进行了一些更改(我不是复制和粘贴程序员)。

我的问题是:如何在创建子视图时添加TextView,和其他各种元素?Button

(如果您有兴趣,请从谷歌下载项目:完整项目

以下是我的活动:

/**
 * 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);

这是我的 XML,LinearLayout其中创建了所有子视图:

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

通过向线性布局添加一个按钮或一个编辑文本,它会将其视为一个全新的视图,每个视图只允许一个对象。有没有办法可以将一堆对象猛烈撞击到那个 ONE 布局中?

我对获取context视图和布局的概念也有些困惑……我可能在这里的某个地方误用了它。

4

1 回答 1

1

您不能,至少在您当前的代码中不能。

您的ColoredView类当前 extends View,它不支持拥有自己的子视图。如果要向其中添加子视图,则必须创建一个扩展类ViewGroup(或 ViewGroup 的任何子类)。

一旦您的类 extends ViewGroup,您可以简单地使用该addView()方法添加视图,并通过传递对齐它们(如果您的视图需要复杂的定位,LayoutParams您也可以创建自定义)。LayoutParams

于 2013-05-19T20:48:23.303 回答