AutoTransition не работает в макете движения - PullRequest
0 голосов
/ 17 июня 2020

Я сейчас изучаю motionlayout. Я создал небольшое приложение, в котором изображение в центре вращается в течение 5 секунд. Атрибуты onClick и onSwipe отлично работают на устройстве, но с autotransition = animateToEnd ничего не происходит, когда я запускаю приложение на устройстве. В основном я хочу, чтобы мой переход происходил автоматически при запуске действия. Вот мой файл макета движения:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/activity_main_scene">

    <ImageView
        android:id="@+id/back"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="TODO"
        android:src="@drawable/background" />

    <ImageView
        android:id="@+id/moon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_moon"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>

Вот мой motionScene:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="5000"
        motion:autoTransition="animateToEnd">
       <KeyFrameSet>
           <KeyCycle
               motion:motionTarget="@+id/moon"
               motion:framePosition="0"
               motion:wavePeriod="2"
               motion:waveShape="sawtooth"
               android:rotation="180"
               motion:waveOffset="0" />
       </KeyFrameSet>
    </Transition>

    <ConstraintSet android:id="@+id/start">
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
    </ConstraintSet>
</MotionScene>

Если есть альтернативный способ запустить переход с макетом движения, сообщите об этом. ** Для запуска приложения, которое я использовал для создания отладочного apk, а затем запускал его на моем устройстве.

Ответы [ 4 ]

1 голос
/ 21 июня 2020

Вы использовали constraintLayout: 2.0.0-beta7 ? Я думаю, что в этой версии есть ошибка. Переход на 2.0.0-beta6 должен исправить это.

0 голосов
/ 20 июля 2020

просто добавьте

app:motionInterpolator="linear"

в тег перехода

0 голосов
/ 17 июня 2020

Не приводите KeyCycle в движение: framePosition = "0", это известная проблема.

KeyCycle действительно нуждается в 2 или 3 значениях, чтобы иметь полное значение. Обычно позиция 0, позиция 100 и одна посередине . Если вы поместите только один, он будет воспроизводить начало (0) и конец (100).

Значение KeyCycles в этом случае состоит в том, что вы можете изменять скорость вращения с течением времени. Чтобы вы могли увеличивать скорость или быстро запускать и замедлять со временем.

0 голосов
/ 17 июня 2020

Автоматический переход не будет работать, если вы не установите свои объекты, такие как изображение в наборе ограничений, добавьте любой виджет, который вы хотите перенести, внутри набора ограничений используйте тег ограничения, и он будет работать. позиция вашего изображения, когда через 5 секунд c сделано в вашем случае, используйте android: Rotation = ""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...