У меня вот такой 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, пытаясь получить в результате вот такую картинку:
Белый прямоугольник - это 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.
Кажется, что отсутствует правильное ограничение. смещение должно применяться с обеих сторон.
constraintSet.connect(imageView.getId(), ConstraintSet.RIGHT, iconsImages.getId(), ConstraintSet.RIGHT, 0);