如何在按下按钮时停止动画

时间:2015-02-07 06:29:56

标签: java android xml animation

按下按钮时我想要发生两件事 1.两张图像应该反复播放,给它一个动画和静态的外观。 2.循环中的声音。

当按钮未按下且手指上升时 声音应该停止 2.动画应该停止。

我现在使用的方法显示在代码中:

    package com.example.newanimation;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ImageView;

public class MainActivity extends Activity {

    AnimationDrawable rocketAnimation;

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      ImageView rocketImage = (ImageView) findViewById(R.id.imageView1);
      rocketImage.setBackgroundResource(R.drawable.ball_animation);
      rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
    }

    public boolean onTouchEvent(MotionEvent event) {
      if (event.getAction() == MotionEvent.ACTION_DOWN) {
        rocketAnimation.start();
        return true;
      }
      return super.onTouchEvent(event);
    }

}

XML就像

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/ball01" android:duration="200" />
    <item android:drawable="@drawable/ball02" android:duration="200" />
    <item android:drawable="@drawable/ball03" android:duration="200" />
</animation-list>

我保留了android:oneshot =“false”&gt;而不是“真实”,因为我希望动画来回播放而不停止直到按下按钮,但是当手指从按钮上移时我需要它停止。

2 个答案:

答案 0 :(得分:1)

onTouchEvent()中,检查MotionEvent.ACTION_UP是否知道按钮已被按下。

public boolean onTouchEvent(MotionEvent event) {
  if (event.getAction() == MotionEvent.ACTION_UP) {
    if(rocketAnimation.isRunning()){
      rocketAnimation.stop();
    }
  }

  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    if(!rocketAnimation.isRunning()){
      rocketAnimation.start();
    }
  }
  return super.onTouchEvent(event);
}

答案 1 :(得分:0)

以下代码是您解决问题的完美解决方案。

public class MainActivity extends Activity {

    AnimationDrawable rocketAnimation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView rocketImage = (ImageView) findViewById(R.id.imageView1);
        Button button = (Button) findViewById(R.id.button);
        rocketImage.setBackgroundResource(R.drawable.roket);
        rocketAnimation = (AnimationDrawable) rocketImage.getBackground();


        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    rocketAnimation.start();
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    rocketAnimation.stop();
                    return false;
                } else
                    return false;
            }
        });
    }
}

检查视频以进行演示 https://www.youtube.com/watch?v=shQ8GOfeJew&feature=youtu.be