【发布时间】:2016-01-26 18:26:58
【问题描述】:
我想向FrameLayout 添加一个新视图,但它只在“有时”起作用。
例如:我为我的布局设置了一个OnClickListener(在活动的 onCreate 方法内),它为布局添加了一个新视图(这有效)。在活动的运行方法中,我使用完全相同的代码来添加这样的视图,但视图没有显示出来。不知道为什么……
这里有一些代码:
OnClickListener,它为布局添加了一个新视图,并且该视图实际显示出来。 layout 是FrameLayout,obstacles 是一个对象列表。
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);
}
【问题讨论】:
-
活动的运行方法???
-
@Msp 我正在使用一个可运行的处理程序,它调用该方法
标签: java android android-view android-framelayout