android - ConstraintSet>>applyTo 将 TextView 的 Alpha 设置为 1f

标签 android kotlin textview constraints alpha

我正在使用 Android Studio 使用 Kotlin 编写 Android 应用(目标 API 28,最小 API 22)。

我有一个 ConstraintLayout,其中添加了一些 View 。其中有一个简单的TextView。我希望 TextView 使用 0f 的 alpha 进行初始化(不可见),然后稍后(通过动画)将其值更改为 1f 以使它们可见。我让动画正常工作,但初始 alpha 似乎没有任何效果。我最终将问题追溯到 ConstraintSet>>applyTo(...) 方法。下面的代码 fragment 显示 ConstraintSet>>applyTo(...) 将 TextView 的 alpha 设置回 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

通过在 ConstraintSet>>applyTo(...) 调用之后设置 TextView 的 alpha,我实现了 0f 的 alpha。

我的问题是……为什么?为什么 ConstraintSet 会改变它所约束的 View 的属性(看起来)与约束无关? ConstraintSet 在应用时是否设置了其他属性?

最佳答案

是的,这很违反直觉。 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
}

关于android - ConstraintSet>>applyTo 将 TextView 的 Alpha 设置为 1f,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285640/

相关文章:

android - 带有 gravity=center 和 ellipsize=marquee 的 TextView?

android - 如何禁用长按android的键盘

android - Nexus 4 - NFC AAR 和过滤器

android - 是否保证getExternalFilesDir()和getFilesDir()在同一个存储设备上

kotlin - Reactor - 只为慢速消费者保留/处理最新值

java - Kotlin 类型方差和星形投影

android - 同步相机预览和处理

android - 广义函数以避免重复

Android 将 TextView 保持在 ImageView 内的固定位置

android - 如何将自定义字体添加到 TextView 并证明它的合理性