【问题标题】:addView method does not display new viewaddView 方法不显示新视图
【发布时间】:2016-01-26 18:26:58
【问题描述】:

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

这里有一些代码:

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);
}

【问题讨论】:

  • 活动的运行方法???
  • @Msp 我正在使用一个可运行的处理程序,它调用该方法

标签: java android android-view android-framelayout


【解决方案1】:

这是FrameLayout,视图将相互重叠

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

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

【讨论】:

  • 它们不在彼此之上。如果我使用 onclicklistener 添加视图,它们的上边距为 (570*scale)/8 所以如果我移动这些视图并单击,我可以在这个位置看到新视图。但是在 if 语句中,新视图没有被放置在这个期望的位置
  • @purpule 是的,我明白了。但是你在哪里修改这个比例?如果您添加具有相同比例的所有视图,它们彼此重叠
  • 比例没有被修改。这是我的屏幕比例(scale=getResources().getDisplayMetrics().density;),所以我不必使用绝对像素进行操作
  • @purpule 因此,您将所有视图添加到同一位置(x, y) - 它们被绘制在彼此之上
  • 是的,但是当我将视图绘制到这个位置时,我会移动其他视图。所以我实际上可以看到新视图,但我看不到,所以我很困惑
猜你喜欢
  • 2014-05-28
  • 2015-08-28
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
相关资源
最近更新 更多