我正在尝试链接两个相同类型的View Animations,在本例中为alpha。最初,我希望我的View在向左平移时淡出,然后在完成后,View应该在屏幕中央淡入。
我可以让动画滑动并向左淡化,但是,当我尝试添加淡入动画后,没有动画发生时,alpha突然变为0.2。我尝试过玩fillAfter
和fillBefore
,但这些似乎没有什么区别。据我所知,View Animation对View的实际属性没有影响。到目前为止,这是我的代码:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillBefore="false"
android:fillEnabled="true"
android:shareInterpolator="false">
<translate
android:duration="450"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
<alpha
android:duration="450"
android:fromAlpha="1.0"
android:toAlpha="0.2" />
<alpha
android:duration="450"
android:fromAlpha="0.2"
android:toAlpha="1.0"
android:startOffset="450" />
</set>
我知道我可以使用动画侦听器达到预期的效果,但是,在我看来,只有XML的解决方案会更优雅。
答案 0 :(得分:3)
有点棘手。让我们尝试遵循他们的逻辑:
fillAfter =在动画发生后应用更改
好吧,那很容易......但是填充之前究竟是什么?fillBefore =在动画开始之前应用一些动画值
因此,在您的示例中,从您的集合中移除fillBefore并进行以下更改的一次:
<!-- fillAfter = true -->
<!-- after animation complete don't change opacity back to 1.. let it remain 0.2 -->
<alpha
android:duration="450"
android:fillAfter="true"
android:fromAlpha="1.0"
android:toAlpha="0.2" />
<!-- fillBefore = true -->
<!-- before animation starts set alpha to 0.2 -->
<alpha
android:duration="450"
android:fillBefore="true"
android:fromAlpha="0.2"
android:toAlpha="1.0"
android:startOffset="450" />
你不需要两者 - 只是为了在你的案例中显示这些命令的含义
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillEnabled="true"
android:shareInterpolator="true" >
<translate
android:duration="450"
android:fillAfter="false"
android:fillEnabled="true"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
<alpha
android:duration="450"
android:fillAfter="false"
android:fillEnabled="true"
android:fromAlpha="1.0"
android:toAlpha="0" />
<alpha
android:duration="450"
android:fillAfter="true"
android:fillBefore="false"
android:fromAlpha="0.2"
android:startOffset="450"
android:toAlpha="1.0" />
</set>
答案 1 :(得分:0)
ymz's回答得到了我90%的方式,但是为了获得理想的效果,我必须进行两次更改。主要问题是跳过了第一个淡出动画,为了解决这个问题,我做了以下修改:
fillEnabled="true"
中删除AnimationSet
属性。我不知道为什么,但是如果在Set而不是它的子节点上将此属性设置为true,那么第一个alpha(淡出)动画将无法工作。它只会跳到第二个alpha动画上的fromAlpha
值(淡入)。fillEnabled=true
属性添加到第二个(淡入)Alpha动画。这是因为我们需要将fillBefore
设置为false(因为docs fillBefore
将被忽略,除非fillEnabled
设置为true)。最终解决方案如下:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:duration="800"
android:fillAfter="false"
android:fillEnabled="true"
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:startOffset="0"/>
<alpha
android:duration="800"
android:fillAfter="false"
android:fillEnabled="true"
android:fromAlpha="1"
android:toAlpha="0"
android:startOffset="0"/>
<alpha
android:duration="800"
android:fillAfter="true"
android:fillEnabled="true"
android:fillBefore="false"
android:fromAlpha="0.1"
android:startOffset="800"
android:toAlpha="1.0" />
</set>