淡入淡出在 MotionLayout 中不起作用

Rob*_*nez 6 android android-transitions android-motionlayout

我正在尝试使用 alpha 和 motionLayout 制作淡入淡出的效果,但似乎不起作用。

这是我想要淡出的 imageView。

    <ImageView
    android:id="@+id/tijeras"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:contentDescription="@string/tijeras"
    android:src="@drawable/ic_tijeras" />
    </android.support.constraint.motion.MotionLayout>
Run Code Online (Sandbox Code Playgroud)

这是运动文件

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <Transition
        app:duration="2000"
        app:constraintSetStart="@+id/start"
        app:constraintSetEnd="@+id/end">
        <KeyFrameSet>
            <KeyAttribute
                app:framePosition="0"
                app:motionTarget="@id/tijeras"
                android:alpha="1.0"/>
            <KeyAttribute
                app:framePosition="50"
                app:motionTarget="@id/tijeras"
                android:alpha="0.0"/>
        </KeyFrameSet>
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint android:id="@+id/tijeras"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="1.0"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/logo"/>
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@+id/tijeras"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="1.0"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/logo"/>
    </ConstraintSet>
</MotionScene>
Run Code Online (Sandbox Code Playgroud)

我可以看到图像,但它没有进行 alpha 输入和输出。任何的想法?我需要触发它才能启动吗?

小智 1

我想我已经找到了问题和解决方案。所以你定义了两个 ConstraintSet (start, end) 并且在 alpha = 1 中,这意味着你的视图在它们中都是可见的,对吗?现在让我们看看您的 KeyFrameSet

<KeyFrameSet>
        <KeyAttribute
            app:framePosition="0"
            app:motionTarget="@id/tijeras"
            android:alpha="1.0"/>
        <KeyAttribute
            app:framePosition="50"
            app:motionTarget="@id/tijeras"
            android:alpha="0.0"/>
    </KeyFrameSet>
Run Code Online (Sandbox Code Playgroud)

你是说在framePosition = 0时你的视图是可见的(alpha=1),然后在你的转换中间(framePosition = 50)你隐藏了你的视图(alpha=0)。这意味着当您处于framePosition = 100(过渡结束)时,alpha 将再次为1,因为在您的ConstraintSet(结束)中等于1。

所以尝试像这样改变它,而不是50,framePosition = 100

<KeyFrameSet>
        <KeyAttribute
            app:framePosition="0"
            app:motionTarget="@id/tijeras"
            android:alpha="1.0"/>
        <KeyAttribute
            app:framePosition="100"
            app:motionTarget="@id/tijeras"
            android:alpha="0.0"/>
    </KeyFrameSet>
Run Code Online (Sandbox Code Playgroud)