Je souhaite ajouter une nouvelle vue à un FrameLayout
, mais cela ne fonctionne que "parfois". Par exemple: J'ai mis un OnClickListener
à ma disposition (à l'intérieur de la méthode onCreate de l'activité) qui ajoute une nouvelle vue à la mise en page (cela fonctionne). Dans la méthode run de l'activité, j'utilise exactement le même code pour ajouter une telle vue, mais la vue n'apparaît pas. Je ne sais pas pourquoi ...La méthode addView n'affiche pas la nouvelle vue
Voici un code:
OnClickListener
, ce qui ajoute une nouvelle vue de la mise en page et la vue montre réellement. layout
est le FrameLayout
, obstacles
est une liste d'objets.
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);
}
});
instruction if est vrai, la nouvelle vue n'est pas affiché, mais la taille des obstacles et la childCount de la mise en page accroître à la fois par 1
if(checkForNew()){
obstacles.add(new Obstacle(getBaseContext(), 0, (int) ((scale * 570)/8), scale));
layout.addView(obstacles.get(obstacles.size() - 1).view);
}
Constructeur de 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);
}
Ceci déplace les vues:
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);
}
run-méthode de l'activité ??? – Msp
@Msp J'utilise un gestionnaire runnable, qui appelle la méthode – purpule