在布局Android中动态添加ImageView

时间:2014-07-08 13:52:18

标签: android animation android-imageview

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

这是我的代码的一部分,但我收到此错误:指定的子代已经有父代。您必须先在孩子的父母身上调用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);
        }
    }

谢谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

    int random1=random(5);
    int random2=random(9);
    layoutBase.removeAllViews();

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

答案 2 :(得分:0)

每次循环时都不需要重新创建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次并添加或删除子项。