J'essaie d'obtenir les positions d'une image après l'avoir ajoutée à une mise en page relative.Obtenir les positions des éléments après l'ajout à la mise en page dans Android
J'ajoute des images au hasard dans la disposition relative en cliquant sur un bouton. Jusqu'à présent, cela fonctionne très bien. Mais pourquoi getLeft, getRight, getTop, getBottom renvoient 0? La chose est, que les valeurs sont toutes disponibles sur le prochain bouton. Donc, quand ImageView 1 a tout 0 sur la création, il a l'information si je clique à nouveau sur le bouton.
donc à préciser:
ButtonClick-1 -> ImageView-1 ajouté (sorties 0 sur getLeft, Haut, Droite, Bas)
ButtonClick-2 -> ImageView-2 ajouté (ImageView-1 sorties coordonnées, mais ImageView-2 sorties 0)
Je suis sûr que cela a à voir avec le dessin de l'ImageView. Sûrement il n'est pas prêt dessiné sur la vue quand je itère sur les enfants et demande les positions réelles.
Voici mon code à ce jour:
final ConstraintLayout cl = (ConstraintLayout) findViewById(R.id.constraintLayout);
final ScrollView sc=(ScrollView) findViewById(R.id.scrollView);
final Button btnButton = (Button) findViewById(R.id.buttontest);
final LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout);
final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rLayout);
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView im= new ImageView(UserAreaActivity.this);
im.setImageResource(R.mipmap.ic_launcher);
im.setScaleType(ImageView.ScaleType.FIT_XY);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
Random r = new Random();
Random r2 = new Random();
int x = r.nextInt(rl.getWidth());
int y = r2.nextInt(rl.getHeight());
if(x+(layoutParams.width) >= rl.getWidth()){
x=x-layoutParams.width;
}
if(y+(layoutParams.height) >= rl.getHeight()){
y=y-layoutParams.height;
}
layoutParams.leftMargin=x;
layoutParams.topMargin=y;
im.setLayoutParams(layoutParams);
TextView tv = new TextView(UserAreaActivity.this);
tv.setText("my text");
rl.addView(im);
ll.addView(tv);
System.out.println("ID "+im.getId());
System.out.println("Left "+im.getLeft());
System.out.println("Right "+im.getRight());
System.out.println("Top "+im.getTop());
System.out.println("Bottom "+im.getBottom());
for (int i = 0; i < rl.getChildCount(); i++) {
View subView = rl.getChildAt(i);
if (subView instanceof ImageView) {
ImageView imageView = (ImageView) subView;
System.out.println("ID "+i);
System.out.println("Left "+imageView.getLeft());
System.out.println("Right "+imageView.getRight());
System.out.println("Top "+imageView.getTop());
System.out.println("Bottom "+imageView.getBottom());
}
}
}
});
Merci beaucoup! Cela a résolu mon problème. Btw. J'ai dû faire attention à l'API sur laquelle je travaille car removeOnGlobalLayoutListener n'est pas couvert dans API Lvl 15 – Sully