SetHorizontalBias в ConstraintSet с представлением, созданным программно

У меня вот такой ConstraintLayout:

<android.support.constraint.ConstraintLayout
            android:id = "@+id/fragment_live_icons_layout"
            app:layout_constraintLeft_toLeftOf = "parent"
            app:layout_constraintRight_toRightOf = "parent"
            app:layout_constraintTop_toBottomOf = "@+id/fragment_live_clock"
            app:layout_constraintBottom_toTopOf = "@+id/fragment_live_progress_bar_time"
            android:background = "@color/futbolinAzul"
            android:layout_width = "match_parent"
            android:layout_marginLeft = "@dimen/margin_n"
            android:layout_marginRight = "@dimen/margin_n"
            android:layout_height = "@dimen/height_sm"/>

И программно я хочу добавить внутрь него ImageViews, пытаясь получить в результате вот такую ​​картинку:

SetHorizontalBias в ConstraintSet с представлением, созданным программно

Белый прямоугольник - это ConstraintLayout, а мяч и желтые карточки - это разные ImageView, добавленные программно.

Первым делом я создал один ImageView:

iconImages = v.findViewById(R.id.fragment_live_icons_layout); //CONSTRAINTLAYOUT
ImageView imageView =  new ImageView(getContext());
imageView.setId(View.generateViewId());
imageView.setBackgroundResource(R.drawable.ic_ball);

После этого я добавляю imageView к ConstraintLayout:

iconsImages.addView(imageView);

Затем я создал ConstraintSet и клонировал ConstraintLayout:

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(iconImages);

И, наконец, я установил horizontalBias, используя свою переменную minutes:

constraintSet.connect(imageView.getId(), ConstraintSet.TOP, iconsImages.getId(), ConstraintSet.TOP, 0);
constraintSet.connect(imageView.getId(), ConstraintSet.LEFT, iconsImages.getId(), ConstraintSet.LEFT, 0);

 //   constraintSet.setVerticalBias(imageView.getId(),  0.5f);
    constraintSet.setHorizontalBias(imageView.getId(),  (float)minutes/90);
    constraintSet.applyTo(iconsImages);
    TransitionManager.beginDelayedTransition(iconsImages);

Обычно он имеет значения в переменной minutes от 15 до 80. Проблема в том, что все imageView устанавливаются в начале ConstraintLayout.

Как это: SetHorizontalBias в ConstraintSet с представлением, созданным программно

2
0
529
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что отсутствует правильное ограничение. смещение должно применяться с обеих сторон.

constraintSet.connect(imageView.getId(), ConstraintSet.RIGHT, iconsImages.getId(), ConstraintSet.RIGHT, 0);

Другие вопросы по теме