Я использую макет ограничения. У меня следующие взгляды:
<View
android:id = "@+id/view"
android:layout_width = "1dp"
android:layout_height = "0dp"
android:layout_marginBottom = "4dp"
android:layout_marginTop = "8dp"
android:background = "@android:color/transparent"
app:layout_constraintBottom_toTopOf = "@+id/checkbox"
app:layout_constraintEnd_toEndOf = "@+id/checkbox"
app:layout_constraintHorizontal_bias = "0.5"
app:layout_constraintStart_toStartOf = "@+id/checkbox"
app:layout_constraintTop_toTopOf = "parent"
app:layout_constraintVertical_chainStyle = "spread_inside" />
<View
android:id = "@+id/line"
android:layout_width = "1dp"
android:layout_height = "1dp"
android:background = "@android:color/black"
android:alpha = "0"
android:transformPivotY = "0dp"
app:layout_constraintBottom_toBottomOf = "@+id/view"
app:layout_constraintEnd_toEndOf = "@+id/view"
app:layout_constraintStart_toStartOf = "@+id/view"
app:layout_constraintTop_toTopOf = "@+id/view"
app:layout_constraintVertical_bias = "0" />
В представлении есть android:layout_height=1dp. Это эквивалент match_constraint. Я хотел бы программно получить высоту этого представления. Поскольку мне нужно это значение только при вводе пользователем, не нужно беспокоиться о жизненном цикле представления.
Используя такие методы, как view.layoutParams.height, я получаю 0dp, что неверно, поскольку высота представления больше, чем это (ограничено match_constraint). Однако это может неправильно отражать значение в xml.
Используя view.height, я получаю, например, 103, но я считаю, что высота представления на самом деле намного меньше, чем эта, поскольку при назначении line.animate().scaleY(view.height.toFloat()) высота строки намного больше, чем высота представления.
Я еще не работал с макетом ограничений, но не думаю, что это имеет отношение к ответу, поэтому вот что я нашел:
view.animate().scaleY() не очень ясна, но, немного поэкспериментировав, я думаю, что это масштаб фактор (так что 1 не даст никаких изменений, а 2 удвоит обзор и т. д.).view.getViewTreeObserver().addOnGlobalLayoutListenerНапример:
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
view.animate().scaleY(2).setDuration(1000);
int height = view.getHeight();
...
}
});