MotionLayout 中的 Android CustomAttribute 来更改 TextView 中的文本

Osc*_*dez 8 android android-custom-attributes android-motionlayout

任何人都可以帮助我以正确的方式更改 中TextView的文本MotionLayout......这就是我所做的。

我测试了MotionLayout一个简单的应用程序......我在到达部分运动教程CustomAttributes

使用它们,您可以更改BackgroundColora 的View,也可以textColor使用customColorValue

在这种情况下,您可以看到它在开始和结束场景中更改这些值非常有效:

        <CustomAttribute
            motion:attributeName="backgroundColor"
            motion:customColorValue="#004A6D" />

        <CustomAttribute
            motion:attributeName="textColor"
            motion:customColorValue="#000000" />
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

另外我注意到有一个customStringValue所以我想我可以将TextView文本更改为“BEFORE”->“AFTER”。但是当我尝试CustomAttribute在应用程序崩溃时设置它时。

在开始场景中:

<CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="BEFORE" />
Run Code Online (Sandbox Code Playgroud)

在最后的场景中:

        <CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="AFTER" />
Run Code Online (Sandbox Code Playgroud)

在 MotionScene 之外,textView文本是TEST

  • 当我CustomAttribute为结束场景设置only 时...文本从初始值TEST更改为结束AFTER值......所以它部分工作但永远不会返回到初始状态。
  • 当没有设置初始文本时也会发生这种情况TextView。它部分工作。

在此处输入图片说明

所以......任何人都可以帮我用正确的方式来改变TextView在的文本MotionLayout

小智 5

这样做的简单方法是

 <ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
      >

        <CustomAttribute
            app:attributeName="textColor"
            app:customColorValue="#1D1D1D" />
    </Constraint>
</ConstraintSet>
Run Code Online (Sandbox Code Playgroud)

    <Constraint
        android:id="@id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <CustomAttribute
            app:attributeName="textColor"
            app:customColorValue="#FFFFFF" />
    </Constraint>
</ConstraintSet>
Run Code Online (Sandbox Code Playgroud)

将动作更改为应用程序


小智 4

您可以使用 TransitionListener 以编程方式完成此操作,如下所示:

motionLayout.setTransitionListener(object : MotionLayout.TransitionListener {
    override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
        // ADD YOUR CODE HERE
    }

    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
        // ADD YOUR CODE HERE
    }

    override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {
        textView.text = if(p3==0f) "before" else "after"
    }

    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {

    }
})
Run Code Online (Sandbox Code Playgroud)