Android:如何对角扩展和缩小视图?

时间:2012-04-25 12:00:43

标签: android animation

我正在尝试为放大和缩小回初始大小的视图设置动画。我尝试使用动画集添加两个动画,以便第二个动画将在第一个动画后开始,但无法使其正常工作。

AnimationSet expandAndShrink = new AnimationSet(true);
ScaleAnimation expand = new ScaleAnimation(
     1f, 1.5f, 
     1f, 1.5f,
     Animation.RELATIVE_TO_PARENT, 0,
     Animation.RELATIVE_TO_PARENT, 0);

ScaleAnimation shrink = new ScaleAnimation(
     1.5f, 1f, 
     1.5f, 1f,
     Animation.RELATIVE_TO_PARENT, 1f,
     Animation.RELATIVE_TO_PARENT, 1f);

expandAndShrink.addAnimation(expand);
expandAndShrink.addAnimation(shrink)
expandAndShrink.setFillAfter(true);
expandAndShrink.setDuration(1000);
expandAndShrink.setInterpolator(new AccelerateInterpolator(1.0f));

view.bringToFront();
view.startAnimation(expandAndShrink);

我非常感谢任何有助于它运作的帮助。提前致谢

2 个答案:

答案 0 :(得分:6)

我修复了“展开”和“缩小”动画,并为两者增加了持续时间。你还应该添加shrink.setStartOffset(1000);所以第二个动画稍后开始

    AnimationSet expandAndShrink = new AnimationSet(true);
    ScaleAnimation expand = new ScaleAnimation(
         1f, 1.5f, 
         1f, 1.5f,
         Animation.RELATIVE_TO_PARENT, 0,
         Animation.RELATIVE_TO_PARENT, 0);
    expand.setDuration(1000);

    ScaleAnimation shrink = new ScaleAnimation(
         1.5f, 1f, 
         1.5f, 1f,
         Animation.RELATIVE_TO_PARENT, 0f,
         Animation.RELATIVE_TO_PARENT, 0f);
    shrink.setStartOffset(1000);
    shrink.setDuration(1000);

    expandAndShrink.addAnimation(expand);
    expandAndShrink.addAnimation(shrink);
    expandAndShrink.setFillAfter(true);
    expandAndShrink.setInterpolator(new AccelerateInterpolator(1.0f));

    view.startAnimation(expandAndShrink);

答案 1 :(得分:0)

我将说明选择动画布局更改的方式。

Android有一个名为ScaleAnimation的特殊动画类,我们可以在其中平滑地扩展或折叠视图。

通过对角扩展显示视图:

ScaleAnimation expanding = new ScaleAnimation(
   0, 1.0f,
   0, 1.0f,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0);
expanding.setDuration(250);

view.startAnimation(expanding)

使用的构造函数为:

ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

因此您可以相应地更改值。

例如,以下示例将水平显示视图动画

ScaleAnimation expanding = new ScaleAnimation(
   0, 1.1f,
   1f, 1f,
   Animation.RELATIVE_TO_PARENT, 0,
   Animation.RELATIVE_TO_PARENT, 0);
expanding.setDuration(250);

您可以根据需要更改fromXtoXfromYtoY

例如,如果显示了视图,而您只需要展开它,则将fromXfromY放在1.0f上,将toXtoY放在需要。

现在,使用相同的类,您可以通过将视图稍微扩大一点,然后将其缩小到原始大小,来创建更酷的效果来显示视图。为此,将使用AnimationSet。这样会产生一种泡沫效果。

下面的示例用于创建气泡效果以显示视图:

AnimationSet expandThenShrink = new AnimationSet(true);

ScaleAnimation expanding = new ScaleAnimation(
   0, 1.1f,
   0, 1.1f,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0);
expanding.setDuration(250);

ScaleAnimation shrinking = new ScaleAnimation(
   1.1f, 1f,
   1.1f, 1f,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0);
shrinking.setStartOffset(250);
shrinking.setDuration(120);

expandThenShrink.addAnimation(expanding);
expandThenShrink.addAnimation(shrinking);
expandThenShrink.setFillAfter(true);
expandThenShrink.setInterpolator(new AccelerateInterpolator(1.0f));

view.startAnimation(expandThenShrink);