0

J'ai une ImageView créée dynamiquement dans une disposition de contrainte. Une fois que j'ai lancé l'application, l'ImageView s'affiche dans le coin supérieur gauche, car aucune position n'est définie pour ImageView. Comment puis-je définir dynamiquement la position (disons CENTER) de ImageView?Comment puis-je définir dynamiquement une position ImageView dans Constraint Layout?

J'ai écrit ci-dessous le code

ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.constraintLayout); 

ImageView imageView = new ImageView(ChooseOptionsActivity.this); 
imageView.setImageResource(R.drawable.redlight); 

layout.addView(imageView); 

setContentView(layout); 

Toute suggestion est très apprécié.

Répondre

1

Vous devrez utiliser un ConstraintSet appliqué au ImageView pour le centrer. La documentation pour ConstraintSet peut être trouvée here.

Cette classe vous permet de définir par programmation un ensemble de contraintes à utiliser avec ConstraintLayout. Il vous permet de créer et d'enregistrer des contraintes et de les appliquer à un objet ConstraintLayout existant. ConstraintsSet peut être créé de différentes manières ...

Peut-être que la chose la plus délicate ici est comment la vue est centrée. Une bonne description de la technique de centrage est here.

Pour exemple, le code suivant suffit:

// Get existing constraints into a ConstraintSet 
    ConstraintSet constraints = new ConstraintSet(); 
    constraints.clone(layout); 
    // Define our ImageView and add it to layout 
    ImageView imageView = new ImageView(this); 
    imageView.setId(View.generateViewId()); 
    imageView.setImageResource(R.drawable.redlight); 
    layout.addView(imageView); 
    // Now constrain the ImageView so it is centered on the screen. 
    // There is also a "center" method that can be used here. 
    constraints.constrainWidth(imageView.getId(), ConstraintSet.WRAP_CONTENT); 
    constraints.constrainHeight(imageView.getId(), ConstraintSet.WRAP_CONTENT); 
    constraints.center(imageView.getId(), ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 
      0, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0, 0.5f); 
    constraints.center(imageView.getId(), ConstraintSet.PARENT_ID, ConstraintSet.TOP, 
      0, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0, 0.5f); 
    constraints.applyTo(layout);