动画·Activity

一、MainActivity.java

(一)onCreate()

Animation welcomeAnimation = AnimationUtils.loadAnimation(this, R.anim.welcome);//从res文件夹的anim文件夹中取出动画资源

welcomeTextView.setAnimation(welcomeAnimation);

welcomeAnimation.setAnimationListener(new AnimationListener() {//设置动画的监听事件,达到控制动画的目的

public void onAnimationStart(Animation animation) {}//动画开始时执行的操作

public void onAnimationRepeat(Animation animation) {}//当动画重复播放时执行的操作

public void onAnimationEnd(Animation animation) {//结束时执行的操作

Intent intent = new Intent(MainActivity.this,RocketShowActivity.class);//结束时执行页面跳转

startActivity(intent);}});

(二)private void findViews()

变量也只有控件 TextView:welcomeTextView

二、RocketShowActivity.java

(一)变量:

ImageView:bombImageView、rocketImageView

Button:rocketFireButton、shootButton

帧动画 AnimationDrawable:rocketFireAnimation、moonBombAnimation、changeFlyAnimation

补间动画 Animation:rocketShootAnimation

SoundPool: soundPool

(二)onCreate(Bundle savedInstanceState)

findViews();

getAnimation();

setlistener();

setAnimationListener();

loadSound();

(三)private void loadSound()

soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 1);

soundPool.load(RocketShowActivity.this, R.raw.rock_fast, 1);

SoundPool()参数1:同时播放的音频的数量 参数2:播放的音频的类型 参数3:播放音频的质量

load()参数1:上下文 参数2:音频的资源ID 参数3:优先级

在需要播放的地方添加.play()方法。

(四)private void setAnimationListener()

1.rocketShootAnimation.setAnimationListener

(1)public void onAnimationStart(Animation animation)

(2)public void onAnimationRepeat(Animation animation)

(3)public void onAnimationEnd(Animation animation)

rocketImageView.setVisibility(View.GONE);//把控件移走

bombImageView.setVisibility(View.VISIBLE);//要播放动画的控件显示可见

soundPool.play(1, 1, 1, 1, 0, 1);

moonBombAnimation.start();//播放动画

moonBombAnimation.setOneShot(true);//只播放一遍

帧动画无法设置监听,设置计时器已达到监听的目的

int duration = 0;

for (int i = 0; i < moonBombAnimation.getNumberOfFrames(); i++) {

duration = duration + moonBombAnimation.getDuration(i);}

Handler handler = new Handler();//通过handler新建线程刷新

handler.postDelayed(new Runnable() {

public void run() {

bombImageView.setBackgroundResource(R.drawable.change_animation);

changeFlyAnimation = (AnimationDrawable) bombImageView.getBackground();

changeFlyAnimation.start();

shootButton.setText("再来一次");}}, duration);  }});

(五)private void setlistener()

1.rocketFireButton.setOnClickListener()

参数里新建匿名类new OnClickListener() ,在匿名类自带的void onClick(View v)的方法中实现代码

if (rocketFireAnimation.isRunning()) {//如果动画在执行

Toast.makeText(RocketShowActivity.this, "已点火成功,请发射", 1).show();//则显示吐司,参数依次为:上下文、显示的内容、隔多长时间显示(秒)。用show函数显示

} else {rocketFireAnimation.start();} //播放帧动画

2.shootButton.setOnClickListener

if (rocketFireAnimation.isRunning()) {  //如果在运行

rocketImageView.startAnimation(rocketShootAnimation); //补间动画的播放

} else if (changeFlyAnimation != null && changeFlyAnimation.isRunning()) {

rocketImageView.setVisibility(View.VISIBLE);//通过控件ImageView设置动画可见。在xml中设置的是不可见

changeFlyAnimation.stop();//帧动画的停止

bombImageView.setBackgroundResource(R.drawable.bomb_animation);

bombImageView.setVisibility(View.GONE *);//见下方注释

} else {Toast.makeText(RocketShowActivity.this, "请先点火再发射", 1).show();}

VISIBLE:设置控件可见 ;INVISIBLE:设置控件不可见;GONE:设置控件隐藏。而INVISIBLE和GONE的主要区别是:当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;而控件属性为GONE时,界面则不保留view控件所占有的空间。

(六)private void getAnimation()

获取Animation,帧动画和补间动画不同。帧动画 先告诉ImageViewBackgroundResource,从R文件里引入animation动画;再把ImageView的background赋值给AnimationDrawable。补间动画 直接用AnimationUtils.loadAnimation( ) 给Animation赋值。

rocketImageView.setBackgroundResource(R.drawable.rocket_fire_animation);//帧动画

rocketFireAnimation = (AnimationDrawable) rocketImageView.getBackground();

bombImageView.setBackgroundResource(R.drawable.bomb_animation);

moonBombAnimation = (AnimationDrawable) bombImageView.getBackground();

rocketShootAnimation = AnimationUtils.loadAnimation(this,R.anim.rocket_fly_animation);//补间动画

(七)private void findViews().

找控件:bombImageView(R.id.roc_boom_img)、rocketFireButton(R.id.roc_rocket_fire_btn)、rocketImageView(R.id.roc_rocket_img)、shootButton(R.id.roc_shoot_btn)

你可能感兴趣的:(动画·Activity)