Ошибка анимации при просмотре Android - PullRequest
0 голосов
/ 09 мая 2018

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

Цель: как я могу предотвратить такие зигзагообразные даты?

http://dai.ly/x6j70qz

http://dai.ly/x6j70yr

Вот родительское представление переработчика:

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview_vins"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:paddingStart="-46dp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

А вот держатель для каждого элемента списка:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/front_layout_read_mode"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/is_selected_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:button="@drawable/checkbox_selector"
        android:checked="false"
        android:scaleX="0.5"
        android:scaleY="0.5"
        app:layout_constraintEnd_toStartOf="@+id/year_make_model_text_view"
        app:layout_constraintTop_toTopOf="@+id/year_make_model_text_view" />

    <TextView
        android:id="@+id/year_make_model_text_view"
        style="@style/VinListYearMakeModel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="64dp"
        android:layout_marginTop="24dp"
        app:layout_constraintEnd_toStartOf="@+id/date_text_view"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="1998 Honda Fit blahblahblahblahblahblahblahblahblahblahblah" />

    <TextView
        android:id="@+id/vin_text_view"
        style="@style/VinListVin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        app:layout_constraintStart_toStartOf="@+id/year_make_model_text_view"
        app:layout_constraintTop_toBottomOf="@+id/year_make_model_text_view"
        tools:text="4JHG2J43HJHG34" />

    <TextView
        android:id="@+id/date_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/year_make_model_text_view"
        tools:text="03/14/18" />

    <TextView
        android:id="@+id/horizontal_rule"
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_marginTop="24dp"
        android:background="#E1E1E1"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/vin_text_view" />
</android.support.constraint.ConstraintLayout>

А вот суть анимации, которая перемещает представление переработчика из стороны в сторону:

val aul = AnimatorUpdateListener {
    Log.i("Animated Value", it.animatedValue.toString())
    recyclerview_vins.setPadding(it.animatedValue as Int, 0 ,0 ,0)
}
val varl = ValueAnimator.ofInt(0, -137) // These values reversed for opposite animation
varl.duration = 400
varl.addUpdateListener(aul)
varl.start()

enter image description here

Я думаю, это может быть связано с другими ошибками, связанными с тем, что последний элемент в списке представления переработчика ведет себя странно:

Странная анимация для RecyclerView Последний элемент

1 Ответ

0 голосов
/ 09 мая 2018

При использовании обзоров переработчика вы должны помнить, что ПРОСМОТРЫ переработаны. это означает, что когда вы прокручиваете, тот же самый вид выводится на экран, который ранее покинул экран.

Так что, если вы просто прокрутите, не сдвинув ничего, все будет в порядке, но в тот момент, когда вы анимируете представление в другую позицию, это представление останется там для следующего активного элемента данных, который заполнит его содержимым.

Вам необходимо убедиться, что, как и в случае с onBindView, вы очищаете анимацию и очищаете предыдущее движение представления. В противном случае он останется выбранным, передвинется или что-то еще, что вы сделали с представлением.

Если вы используете анимацию, вы можете просто использовать UIElementThatYouUsed.clearAnimations () или что-то в этом роде, и оно должно удалить все, что вы анимировали.

У меня были очень похожие проблемы в прошлом, когда анимировались строки вида рециркулятора, они остаются там, где вы их перемещаете, пока вы их не очистите.

...