addView方法不显示新视图

时间:2016-01-26 18:26:59

标签: java android android-view android-framelayout

我想为FrameLayout添加一个新视图,但它只能“有时”工作。 例如:我已经为我的布局设置了OnClickListener(在活动的onCreate方法内),它为布局添加了一个新视图(这是有效的)。在活动的run-method中,我使用完全相同的代码来添加这样的视图,但视图没有显示出来。我不知道为什么......

以下是一些代码:

OnClickListener,它为布局添加了一个新视图,实际显示了视图。 layoutFrameLayoutobstacles是对象列表。

layout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        obstacles.add(new Obstacle(getBaseContext(), 0, (int) ((scale * 570) / 8), scale));
        layout.addView(obstacles.get(obstacles.size() - 1).view);

    }
});

如果陈述为真,则不显示新视图,但障碍物的大小和布局的子计数均增加1

if(checkForNew()){
    obstacles.add(new Obstacle(getBaseContext(), 0, (int) ((scale * 570) / 8), scale));
    layout.addView(obstacles.get(obstacles.size() - 1).view);
}

Obstacle

的构造函数
public Obstacle(Context con, int left, int top, float scale) {
    view = new ImageView(con);
    view.setBackgroundColor(Color.rgb(0, 0, 0));
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams((int)(scale*150), (int)(scale*20));
    params.setMargins(left,top,0,0);
    view.setLayoutParams(params);
    view.setMaxWidth(view.getLayoutParams().width);
    view.setMaxHeight(view.getLayoutParams().height);
}

这是移动视图:

public void Move( View view, float speed, float scale){
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(view.getWidth(), view.getHeight());
    params.setMargins(view.getLeft(), view.getTop() - (int) (scale * -speed), 0, 0);
    view.setLayoutParams(params);
}

1 个答案:

答案 0 :(得分:1)

这是FrameLayout,视图将在彼此之上

您似乎没有在任何地方更改比例,并且您的保证金始终固定为0, (scale * someValue)

您需要为添加的视图应用不同的比例和/或使用不同的顶部/左侧参数。