【问题标题】:Adding ImageViews dynamically in a Layout Android在 Layout Android 中动态添加 ImageView
【发布时间】:2014-07-08 22:03:23
【问题描述】:

我正在尝试在布局上动态添加一些图像视图,因为我必须在同一时间,一个接一个地沿着路径移动它们。

这是我的代码的一部分,但我得到这个错误:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。

我不知道如何解决这个问题。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        int random1=random(5);
        int random2=random(9);


        for(int i=1;i<=random2;i++) {

            RelativeLayout layoutBase = (RelativeLayout) findViewById(R.id.banda_bk);

            ImageView Img = new ImageView(this);

            if (random1 == 1) {
                Img = (ImageView) findViewById(R.id.ImageView1);
                Img.setVisibility(View.VISIBLE);
                anim_translate = AnimationUtils.loadAnimation(getApplicationContext(), translate);
                Img.startAnimation(anim_translate);
            }
            if (random1 == 2) {
                Img = (ImageView) findViewById(R.id.ImageView2);
                Img.setVisibility(View.VISIBLE);
                anim_translate = AnimationUtils.loadAnimation(getApplicationContext(), translate);
                Img.startAnimation(anim_translate);
            }
            if (random1 == 3) {
                Img = (ImageView) findViewById(R.id.ImageView3);
                Img.setVisibility(View.VISIBLE);
                anim_translate = AnimationUtils.loadAnimation(getApplicationContext(), translate);
                Img.startAnimation(anim_translate);
            }
            if (random1 == 4) {
                Img = (ImageView) findViewById(R.id.ImageView4);
                Img.setVisibility(View.VISIBLE);
                anim_translate = AnimationUtils.loadAnimation(getApplicationContext(), translate);
                Img.startAnimation(anim_translate);
            }
            if (random1 == 5) {
                Img = (ImageView) findViewById(R.id.ImageView5);
                Img.setVisibility(View.VISIBLE);
                anim_translate = AnimationUtils.loadAnimation(getApplicationContext(), translate);
                Img.startAnimation(anim_translate);
            }

            layoutBase.addView(Img);
        }
    }

谢谢!

【问题讨论】:

    标签: android animation android-imageview


    【解决方案1】:

    你不需要每次循环都重新创建 layoutBase

        int random1=random(5);
        int random2=random(9);
        RelativeLayout layoutBase = (RelativeLayout) findViewById(R.id.banda_bk);
    
        for(int i=1;i<=random2;i++) {
      ....
    

    获取Relativelayout 1 次并向其添加或删除子级。

    【讨论】:

    • 我已经修改了这个,谢谢。我仍然在这里得到 java.lang.NullPointerException 我认为 if (random1 == 1) { Img = (ImageView) findViewById(R.id.ImageView1); Img.setVisibility(View.VISIBLE);
    • 请检查所有 id=ImageView1、id=ImageView2 等的 imageView 是否在适当的布局上(您需要在布局上拥有所有 5 个 ImageView)。
    • 是的,它们在布局中,并且被隐藏了
    【解决方案2】:

    错误说很清楚。您的 ImageView 已放置在容器中。 在将容器添加到 layoutBase 之前,您需要在容器上调用 ViewGroup.RemoveChildAt(即 LinearLayout 或您使用的)。

    【讨论】:

    • 是的,你是对的,我在代码中添加了 layoutBase.removeAllViews,但现在我得到了 java.lang.NullPointerException。我想在我的布局中随机保留同一图像的副本数。然后我必须移动所有这些。谢谢!
    【解决方案3】:
        int random1=random(5);
        int random2=random(9);
        layoutBase.removeAllViews();
    
        for(int i=1;i<=random2;i++) {
    

    【讨论】:

    • 您应该为您的答案提供一些上下文,并解释它如何解决 OP 的问题。否则,它可能会被删除,因为它被自动标记为“低质量”。
    • 好吧..从下一个病房开始我会做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多