如何创建更自然的CardView alpha动画?

时间:2019-06-25 03:15:08

标签: android android-animation android-cardview

我有一个普通的CardView:

<androidx.cardview.widget.CardView
    android:id="@+id/cardView"
    android:layout_width="256dp"
    android:layout_height="64dp"
    app:cardElevation="4dp" />

然后我设置其Alpha动画:

cardView.animate().alpha(1f).setDuration(3000).start()

我得到:

enter image description here

卡背景首先变为灰色,然后变为白色。如果时间很短,这看起来就像眨眼。看来这仅发生在白色背景上。

这就是我想要的(我在Adobe XD中创建):

enter image description here

如何获得类似的效果?

3 个答案:

答案 0 :(得分:2)

您看到的灰色是CardView的阴影。

您可以在另一个视图中添加CardView并为其设置动画,例如:

<RelativeLayout
    android:id="@+id/animateThis"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:id="@+id/cardView"
        android:layout_width="256dp"
        android:layout_height="64dp"
        app:cardElevation="4dp" />

</RelativeLayout>

然后为RelativeLayout设置动画:

animateThis.animate().alpha(1f).setDuration(3000).start()

答案 1 :(得分:1)

只是想分享一种不同的方法。我希望它可以帮助其他人。

我创建了一个按顺序更改 alpha 和高程的动画,以避免在为 alpha 设置动画时显示阴影。

对于淡入我使用:

<set android:ordering="sequentially">
        <objectAnimator
            android:duration="300"
            android:propertyName="alpha"
            android:valueTo="1"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="300"
            android:propertyName="cardElevation"
            android:valueTo="12dp"
            android:valueType="floatType" />
    </set>

淡出我使用:

<set android:ordering="sequentially">
        <objectAnimator
            android:duration="300"
            android:propertyName="cardElevation"
            android:valueTo="0dp"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="300"
            android:propertyName="alpha"
            android:valueTo="0"
            android:valueType="floatType" />
    </set>

答案 2 :(得分:0)

fadein.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="1.0" />

</set>

 Animation animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
                R.anim.fade_in);
        cardView.startAnimation(animFadein);