Хотя я видел несколько похожих вопросов, ни один из ответов не работал для меня. Может быть, мне не хватает чего-то простого, но я не вижу, что это такое.
У меня есть ConstraintLayout с ImageView внутри. Я добавляю виды динамически и относительно изображения. Все виды прикреплены к верхнему левому углу представления изображения.
Вот макет контейнера:
<android.support.constraint.ConstraintLayout
android:id="@+id/mapLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/mapImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="matrix"
android:src="@drawable/fullmap"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</android.support.constraint.ConstraintLayout>
А вот код для добавления этих представлений:
Map<Integer, Point> positions = createPoints(levels);
ConstraintLayout mapLayout = findViewById(R.id.mapLayout);
LayoutInflater inflater = LayoutInflater.from(this);
for (int i = 0; i < levels.size(); i++) {
ConstraintLayout levelItem = (ConstraintLayout) inflater.inflate(R.layout.quest_map_level_item, mapLayout, false);
levelItem.setId(i);
Point point = positions.get(i);
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(levelItem);
mapLayout.addView(levelItem);
constraintSet.connect(levelItem.getId(), ConstraintSet.START, R.id.mapLayout, ConstraintSet.START, point.x);
constraintSet.connect(levelItem.getId(), ConstraintSet.TOP, R.id.mapLayout, ConstraintSet.TOP, point.y);
constraintSet.applyTo(levelItem);
}
Как я уже упоминал выше, в результате все виды отображаются в верхнем левом углу. Для ясности: point.x & point.y верны и точно не указывают на верхний левый угол.
Большое спасибо,
Giora.