无法在Gingerbread上执行翻译和alpha动画

时间:2013-04-18 04:45:44

标签: android animation

我有以下动画资源:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <translate
        android:duration="@integer/animation_time"
        android:fromXDelta="0%" 
        android:toXDelta="0%" 
        android:fromYDelta="0"
        android:toYDelta="10%"  />
    <alpha
        android:duration="@integer/animation_time"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

我在对话框上设置了这个动画,因此当对话框被解除时,它会稍微向下移动并淡出。这适用于Android 3.0+,但在3.0之前的设备上,动画的alpha部分无法执行任何操作。如果我将持续时间设置为更长的时间,对话框不会立即消失,所以看起来它正在运行,对话框并没有消失。如果我注释掉翻译,或者将翻译上的toYDelta值设置为0(这样就没有任何翻译),alpha就可以在2.3.4上运行,那就是当对话框移动时它不会褪色。

知道为什么会这样吗?我在HTC Evo 3d上遇到了问题,它有4.0的更新,但我没有更新,所以我可以将它用作测试设备。

3 个答案:

答案 0 :(得分:0)

我在共享内插器时遇到了问题。尝试为每个动画设置插补器,而不是使用android:shareInterpolator

答案 1 :(得分:0)

使用浮动的Alpha动画仅在API级别11中引入。但是,自API级别1起,setAlpha(int)动画已存在。我不确定这是否适用于XML,就像它对内置方法一样,但你可以尝试使用整数值“1”和“0”而不是浮点数。

答案 2 :(得分:0)

您可以执行动画,只需将alpha设置为特定的浮点值。我怀疑这是一个有点昂贵的资源,因为每次设置alpha都必须使用动画。

public void setLayoutAlpha(float alpha, View v){
    AlphaAnimation alphaAnim = new AlphaAnimation(alpha, alpha);
    alphaAnim.setFillAfter(true);
    alphaAnim.setFillEnabled(true);
    v.startAnimation(alphaAnim);
}

可以这样调用。

setLayoutAlpha(1f,viewToChangeAlpha);

这是我用来创建swipeToDismiss布局,其中淡入淡出的视图在3.0之前工作

希望它可以用于你需要使用它的任何东西。