一、MainActivity.java
(一)onCreate()
Animation welcomeAnimation = AnimationUtils.loadAnimation(this, R.anim.welcome);//從res文件夾的anim文件夾中取出動畫資源
welcomeTextView.setAnimation(welcomeAnimation);
welcomeAnimation.setAnimationListener(new AnimationListener() {//設(shè)置動畫的監(jiān)聽事件,達(dá)到控制動畫的目的
public void onAnimationStart(Animation animation) {}//動畫開始時執(zhí)行的操作
public void onAnimationRepeat(Animation animation) {}//當(dāng)動畫重復(fù)播放時執(zhí)行的操作
public void onAnimationEnd(Animation animation) {//結(jié)束時執(zhí)行的操作
Intent intent = new Intent(MainActivity.this,RocketShowActivity.class);//結(jié)束時執(zhí)行頁面跳轉(zhuǎn)
startActivity(intent);}});
(二)private void findViews()
變量也只有控件 TextView:welcomeTextView
二、RocketShowActivity.java
(一)變量:
ImageView:bombImageView、rocketImageView
Button:rocketFireButton、shootButton
幀動畫 AnimationDrawable:rocketFireAnimation、moonBombAnimation、changeFlyAnimation
補(bǔ)間動畫 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()參數(shù)1:同時播放的音頻的數(shù)量 參數(shù)2:播放的音頻的類型 參數(shù)3:播放音頻的質(zhì)量
load()參數(shù)1:上下文 參數(shù)2:音頻的資源ID 參數(shù)3:優(yōu)先級
在需要播放的地方添加.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);//只播放一遍
幀動畫無法設(shè)置監(jiān)聽,設(shè)置計(jì)時器已達(dá)到監(jiān)聽的目的
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()
參數(shù)里新建匿名類new OnClickListener() ,在匿名類自帶的void onClick(View v)的方法中實(shí)現(xiàn)代碼
if (rocketFireAnimation.isRunning()) {//如果動畫在執(zhí)行
Toast.makeText(RocketShowActivity.this, "已點(diǎn)火成功,請發(fā)射", 1).show();//則顯示吐司,參數(shù)依次為:上下文、顯示的內(nèi)容、隔多長時間顯示(秒)。用show函數(shù)顯示
} else {rocketFireAnimation.start();} //播放幀動畫
2.shootButton.setOnClickListener
if (rocketFireAnimation.isRunning()) {? //如果在運(yùn)行
rocketImageView.startAnimation(rocketShootAnimation); //補(bǔ)間動畫的播放
} else if (changeFlyAnimation != null && changeFlyAnimation.isRunning()) {
rocketImageView.setVisibility(View.VISIBLE);//通過控件ImageView設(shè)置動畫可見。在xml中設(shè)置的是不可見
changeFlyAnimation.stop();//幀動畫的停止
bombImageView.setBackgroundResource(R.drawable.bomb_animation);
bombImageView.setVisibility(View.GONE *);//見下方注釋
} else {Toast.makeText(RocketShowActivity.this, "請先點(diǎn)火再發(fā)射", 1).show();}
VISIBLE:設(shè)置控件可見 ;INVISIBLE:設(shè)置控件不可見;GONE:設(shè)置控件隱藏。而INVISIBLE和GONE的主要區(qū)別是:當(dāng)控件visibility屬性為INVISIBLE時,界面保留了view控件所占有的空間;而控件屬性為GONE時,界面則不保留view控件所占有的空間。
(六)private void getAnimation()
獲取Animation,幀動畫和補(bǔ)間動畫不同。幀動畫 先告訴ImageViewBackgroundResource,從R文件里引入animation動畫;再把ImageView的background賦值給AnimationDrawable。補(bǔ)間動畫 直接用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);//補(bǔ)間動畫
(七)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)