启动和停止动画

时间:2012-02-22 18:24:48

标签: java android animation

我正在试图弄清楚我在Android应用程序中如何启动和停止动画。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    stopOneButton = (Button) findViewById(R.id.buttonStopOne);
    stopTwoButton = (Button) findViewById(R.id.buttonStopTwo);
    stopThreeButton = (Button) findViewById(R.id.buttonStopThree);
    startButton = (Button) findViewById(R.id.buttonStart);

    firstImage = (ImageView) findViewById(R.id.imageView1);

    firstImage.setBackgroundResource(R.drawable.spin_animation);

    frameAnimation = new AnimationDrawable();
    AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground();
//  frameAnimation.start();

    firstImage.post(new Starter());

    stopOneButton.setOnClickListener(this);
    stopTwoButton.setOnClickListener(this);
    stopThreeButton.setOnClickListener(this);
    startButton.setOnClickListener(this);

}

class Starter implements Runnable {

    public void run() {
        frameAnimation.start();
    }

}

这几乎是我所拥有的一切,而且我从头开始,没有将任何按钮绑定到功能上,但图像根本没有旋转。

这是我的drawable的XML文件:

<?xml version="1.0" encoding="utf-8"?>
 <animation-list
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:oneshot="false">
    <item android:drawable="@drawable/image1" android:duration="500" />
    <item android:drawable="@drawable/image2" android:duration="500" />
    <item android:drawable="@drawable/image3" android:duration="500" />
    <item android:drawable="@drawable/image4" android:duration="500" />
 </animation-list>

更多按钮代码:

@Override
public void onClick(View v) {
    switch(v.getId()) {
        case R.id.buttonStopOne:

        break;

        case R.id.buttonStopTwo:
        break;

        case R.id.buttonStopThree:
        break;

        case R.id.buttonStart:
            frameAnimation.start();
        break;
    }
} 

任何人都可以确定我做错了什么?

1 个答案:

答案 0 :(得分:0)

您必须将动画应用于视图。因此,假设firstImage()是要制作动画的动画,请调用firstImage.startAnimation(frameAnimation)。然后结束它呼叫firstImage.clearAnimation()

修改

确定。现在我看到你正在做什么,我猜你正在使用的Runnable永远不会被调用。你可以尝试的是等到视图完全膨胀并开始动画。像这样:

firstImage = (ImageView) findViewById(R.id.imageView1);
final AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground();
ViewTreeObserver treeObserver = firstImage.getViewTreeObsver();
treeObvserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
   @Override
   public void onGlobalLayout(){
      frameAnimation.start();
   }
}

现在,我还没有尝试过这个,但我想到的是,当视图完全膨胀并且可见时,动画将开始。

旁注:It's also a handy way to figure out when the views have their dimensions.