Перемещение ImageView на экране - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь переместить ImageView в соответствии с нажатыми кнопками. На данный момент я пытаюсь переместить ImageView вверх и вниз, функция Down работает отлично, но проблема в том, когда я пытаюсь сделать его go вверх. Когда ImageView не находится в своем первоначальном положении, ImageView отлично поднимается (пока не достигает своего начального положения), но когда он находится в своем первоначальном положении, он просто поднимается один раз, а затем, когда я снова нажимаю кнопку вверх, он опускается вниз, чтобы его начальная позиция.

(просто чтобы вы знали, что ориентация экрана в альбомной ориентации)

Итак, чтобы переместить мой ImageView вверх, я просто понижаю значение перевода Y imageView.translationY = imageView.translationY.absoluteValue - 25

Я попытался использовать ObjectAnimator.ofFloat(), но imageView возвращается в исходное положение после анимации.

В макете я просто использую макет ограничения и ограничиваю ImageView в центре экрана.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 18 января 2020

Привет, я думаю, что макет ограничения будет хорошим для этого случая. Я создал образец проекта, чтобы проверить это. При этом используется MotionLayout с MotionScene

Идея состоит в том, чтобы создать MotionLayout в качестве родительского макета, а затем определить Childers для анимации в вашем случае его ImageView здесь пример файла макета Используйте этот файл в каком-либо упражнении или фрагменте, чтобы увидеть в действии

<?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"
    android:background="@android:color/holo_red_dark"
    android:orientation="vertical"
    app:layoutDescription="@xml/up_down_descriptor">

    <ImageView
        android:id="@+id/ivStar"
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_star_outline" />

    <Button
        android:id="@+id/btnUp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:text="up"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/ivStar"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnDown"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:text="Down"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/ivStar"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.motion.widget.MotionLayout>

, и вы определите файл описания макета up_down_descriptor в res / xml

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

    <Transition
        app:constraintSetEnd="@+id/down"
        app:constraintSetStart="@+id/center"
        app:duration="2000">

        <OnClick
            app:clickAction="toggle"
            app:targetId="@id/btnDown" />

    </Transition>

    <Transition
        app:constraintSetEnd="@+id/up"
        app:constraintSetStart="@+id/center"
        app:duration="2000">

        <OnClick
            app:clickAction="toggle"
            app:targetId="@id/btnUp" />

    </Transition>

    <ConstraintSet android:id="@+id/center">
        <Constraint
            android:id="@+id/ivStar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </ConstraintSet>

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

        <Constraint
            android:id="@+id/ivStar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </ConstraintSet>

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

        <Constraint
            android:id="@+id/ivStar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </ConstraintSet>

</MotionScene>

MotionLayout позаботится обо всем остальном.

enter image description here

...