9

任何人都可以帮助我以正确的方式更改TextView's text in MotionLayout... 这就是我正在做的事情。

我正在MotionLayout一个简单的应用程序上测试...我到达了关于Motion 教程的部分CustomAttributes

有了它们,您可以更改BackgroundColora 的View,也可以更改textColorusingcustomColorValue

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

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

        <CustomAttribute
            motion:attributeName="textColor"
            motion:customColorValue="#000000" />

在此处输入图像描述

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

在开始场景中:

<CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="BEFORE" />

在最后一幕:

        <CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="AFTER" />

在 MotionScene 之外,textView文本为TEST

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

在此处输入图像描述

TextView所以......任何人都可以帮助我以正确的方式更改MotionLayout.

4

3 回答 3

3

您可以像这样使用 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) {

    }
})
于 2019-02-14T15:15:12.400 回答
2

这样做的简单方法是

 <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>

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

        <CustomAttribute
            app:attributeName="textColor"
            app:customColorValue="#FFFFFF" />
    </Constraint>
</ConstraintSet>

将动作更改为应用程序

于 2020-02-22T13:44:09.653 回答
1

我测试并喜欢这个

在此处输入图像描述

//constraintSetStart
<ConstraintSet...>
<Constraint
  android:id="@+id/button">
    <CustomAttribute
       motion:attributeName="Text"
       motion:customStringValue="CLOSE"/>
</Constraint>
</ConstraintSet>

//constraintSetEnd
<ConstrainSet..>
<Constraint
   android:id="@+id/button">
     <CustomAttribute
       motion:attributeName="Text"
       motion:customStringValue="OPEN"/>
 </Constraint>
</ConstraintSet>
于 2019-02-26T09:38:34.147 回答