ConstraintSet >> applyTo для установки альфы TextView в 1f - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю над приложением Android (Target API 28, мин. API 22), написанным на Kotlin с использованием Android Studio.

У меня есть ConstraintLayout с добавленным в него количеством представлений.Среди них простой TextView.Я хочу, чтобы TextView инициализировался с альфа-значением 0f (невидимым), а затем позже (с помощью анимации) изменил его значение на 1f, чтобы сделать их видимыми.Я запустил анимацию, но первоначальная альфа, похоже, не имела никакого эффекта.В конце концов я отследил проблему до метода ConstraintSet>>applyTo(...).Приведенный ниже фрагмент показывает, что ConstraintSet>>applyTo(...) устанавливает альфа-код TextView обратно на 1f, хотя я явно устанавливаю его на 0f.

val textView = TextView(context)
textView.id = View.generateViewId()
textView.text = "Hello World"
addView(textView)

val set ConstraintSet()
set.constrainHeight(textView.id, WRAP_CONTENT)
set.constrainWidth(textView.id, WRAP_CONTENT)
set.connect(textView.id, TOP, PARENT_ID, TOP)
set.connect(textView.id, START, PARENT_ID, START)
set.connect(textView.id, END, PARENT_ID, END)
set.connect(textView.id, BOTTOM, PARENT_ID, BOTTOM)
println("1. textView=${textView.alpha}")
textView.alpha = 0f
println("2. textView=${textView.alpha}")
set.applyTo(this)
println("3. textView=${textView.alpha}")
textView.alpha = 0f
println("4. textView=${textView.alpha}")

Когда я запускаю свое приложение, генерируется приведенный ниже выводв окне Выполнить:

I/System.out: 1. textView=1.0
              2. textView=0.0
              3. textView=1.0
              4. textView=0.0

Установив альфа-код TextView после вызова ConstraintSet >> applyTo (...), я получаю альфа-значение 0f.

Myвопрос ... почему?Почему ConstraintSet изменяет свойства представлений, которые он ограничивает, которые (казалось бы) не имеют ничего общего с ограничениями?Существуют ли другие свойства, которые ConstraintSet устанавливает при его применении?

1 Ответ

0 голосов
/ 12 сентября 2018

Да, это довольно противоречиво. ConstraintSet создает расширение фактических LayoutParams перед их применением.

Это расширение android.support.constraint.Constraints.LayoutParams, в данный момент (декомпилированное из constraint-layout:1.1.3) оно хранит следующее (со значениями по умолчанию):

public static class LayoutParams extends android.support.constraint.ConstraintLayout.LayoutParams {
    public float alpha = 1.0F;
    public boolean applyElevation = false;
    public float elevation = 0.0F;
    public float rotation = 0.0F;
    public float rotationX = 0.0F;
    public float rotationY = 0.0F;
    public float scaleX = 1.0F;
    public float scaleY = 1.0F;
    public float transformPivotX = 0.0F;
    public float transformPivotY = 0.0F;
    public float translationX = 0.0F;
    public float translationY = 0.0F;
    public float translationZ = 0.0F;

    //... rest of class
}
...