1

我正在尝试为一个视图设置动画,该视图扩展并缩小回初始大小。我尝试使用动画集添加两个动画,以便第二个动画将在第一个动画之后开始,但无法让它工作。

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);

我真的很感激任何帮助让它工作。提前致谢

4

2 回答 2

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);
于 2012-04-25T15:39:39.477 回答
0

我将解释我选择动画布局更改的方式。

Android 有一个特殊的 Animation 类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);

您可以根据需要更改fromX, toX, fromY& 。toY

例如,如果显示视图并且您必须将其展开,则根据需要将fromXand放置fromY1.0f, and 。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);
于 2019-03-07T16:21:19.673 回答