按顺序缩放每个子视图

时间:2015-03-02 09:47:47

标签: android android-layout android-animation

我想按顺序缩放linearlayout的每个视图。我正在使用以下动画xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="600"
     android:shareInterpolator="false" >
    <scale
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.2"
        android:toYScale="1.2" />

    <scale
        android:fromXScale="1.2"
        android:fromYScale="1.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" />
</set>

以这种方式应用

AnimationSet animationSet = (AnimationSet) AnimationUtils.loadAnimation(getContext(), R.anim.scale)
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animationSet, 1f);
        segmentLinearLayout.setLayoutAnimation(layoutAnimationController);
        segmentLinearLayout.startLayoutAnimation();

问题在于所有子视图都按比例放大,而不是1比1缩小而没有动画。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是因为两个尺度都在一起开始和结束

您可以使用android:startOffset="600"在600毫秒后启动。

例如:

<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="false" >
<scale
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="600"
    android:toXScale="1.2"
    android:toYScale="1.2" />

<scale
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="600"
    android:duration="600"
    android:toXScale="0.83"
    android:toYScale="0.83" />

第一个刻度将需要600毫秒,第二个刻度将在600毫秒后开始,然后再单独另外600毫秒

希望这有帮助!!

修改

2次修改:

  1. 我将第二个比例中的fromScaletoScale分别更改为10.83,因此它返回到原始比例尺寸,因为在视图更改为其后较新的规模,新的1或100%需要回到其新规模的83%(1 / 0.83 = 1.2)
  2. 就像你提到的那样,LayoutAnimationController的延迟也需要改变。在我尝试的示例代码中,我使用new LayoutAnimationController(animationSet, 2.0f)延迟了200%(600ms * 2 = 1200ms重新缩放)