1

这是我的 textSwitcher 代码:

        <TextSwitcher
        android:id="@+id/likes_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginEnd="16dp"
        android:inAnimation="@anim/slide_in_likes_counter"
        android:outAnimation="@anim/slide_out_likes_counter">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:padding="8dp"
            android:textColor="@color/black85"
            android:background="#E0E0E0"
            android:text="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:padding="8dp"
            android:textColor="@color/deep_orange_500"
            android:background="#E0E0E0"/>

    </TextSwitcher>

它实际上是一个like按钮。当你点击点赞时,textSwitcher 会向上滑动以显示新的点赞数,比如说从 0 到 1。

现在,当您在单击一次按钮后再次单击该按钮时,它再次向上滑动以显示它从 1 变为 0。

有没有办法让它在你不喜欢的时候滑下来?

该文档并没有说太多:http: //developer.android.com/reference/android/widget/TextSwitcher.html

这是 slide_in_likes_counter 文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="80%p"
        android:toYDelta="0" />
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

这是 slide_out_likes_counter 文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="0"
        android:toYDelta="-80%p" />
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>
4

1 回答 1

1

我希望你在过去的 2 年里没有在电脑前等待答案......

需要 4 个单独的动画:

  • slide_up_inslide_up_out(在你已经实现的向上方向)
  • slide_down_inslide_down_out(向下方向)

slide_down_in并且slide_down_out是前两个的副本,它们分别是fromYDeltatoYDelta倒置的。

slide_up_in(基于您的slide_in_likes_counter

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="80%p"
        android:toYDelta="0" />
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

slide_up_out(基于你的slide_in_likes_counter

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="0"
        android:toYDelta="-80%p" />
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

slide_down_in(新)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="-80%p"
        android:toYDelta="0" />
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

slide_down_out(新)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="150"
    android:interpolator="@android:anim/linear_interpolator">
    <translate
        android:fromYDelta="0"
        android:toYDelta="80%p" />
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

在调用 之前,请setText务必TextSwitcher重置输入和输出动画:

// Slide up
textSwitcher.setInAnimation(context, R.anim.slide_up_in)
textSwitcher.setOutAnimation(context, R.anim.slide_up_out)

// Slide down
textSwitcher.setInAnimation(context, R.anim.slide_down_in)
textSwitcher.setOutAnimation(context, R.anim.slide_down_out)
于 2018-08-15T10:04:51.147 回答