如何在Constraint Layout中动态设置ImageView的位置

时间:2017-06-04 20:25:01

标签: android android-studio-2.3 android-constraintlayout

我在一个Constraint Layout中有一个动态创建的ImageView。运行应用程序后,ImageView显示在左上角,因为没有为ImageView定义位置。 如何动态设置ImageView的位置(让我们说中心)。

我写了以下代码

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

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

layout.addView(imageView);

setContentView(layout);

任何建议都受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您需要使用ConstraintSet应用ImageView来居中。可以找到ConstraintSet的文档here

  

此类允许您以编程方式定义要与ConstraintLayout一起使用的一组约束。它允许您创建和保存约束,并将它们应用于现有的ConstraintLayout。 ConstraintsSet可以用各种方式创建......

这里最棘手的可能是视图如何居中。对中技术的一个很好的描述是here

对于您的示例,以下代码就足够了:

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