猜歌游戏小结(三) 设置动画效果

一、说明

在该游戏中,中间有一个唱片机会旋转,表示正在播放音乐,配套还有一个唱片杆,配合实现整个唱片机的效果。因此,需要实现动画效果。盘片会旋转,而唱片杆会绕一个固定点旋转。

二、方法

  • 1、首先实现唱片布局。将几个图片进行组合,最终形成一个完整的唱片机布局,包括一个盘片,一个唱片杆,在唱片上放置一个点击按钮,这个按钮需要设置一个点击效果,即小结(二)的内容。

  • 2、这个布局是一个子布局,这个布局需要在主布局里进行include.

  • 3、引入动画类Animation,LinearInterpolator.

1
2
3
4
5
6
7
//盘片
private Animation mPanAnim;
private LinearInterpolator mPanLin;
//拨杆
private Animation mBarInAnim;
private LinearInterpolator mBarInLin;
  • 4、在res中新建anim文件夹,设置动画效果文件,如下为盘片旋转效果。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
    android:duration="2400"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="3" //重复次数为3次
    android:toDegrees="359" /> 旋转角度360
    </set>
  • 5、在该文件夹下,设置拨杆的动画效果。由于拨杆进入和退出时两种不同的动画,所以要定义两个文件。

  • 6、在java代码中,进行动画初始化。

1
2
3
mPanAnim = AnimationUtils.loadAnimation(this,R.anim.rotate);
mPanLin = new LinearInterpolator();
mPanAnim.setInterpolator(mPanLin);
  • 7、由于动画效果,是通过点击盘片上的按钮来实现切换的,而动画效果是配合播放按钮来体现的,因此动画效果的开始和结束应该在按钮的点击事件中进行处理。也因此,需要先初始化一个按钮(imageButton),并设置其点击事件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//播放按钮事件
private void handlePlayButton() {
if (mViewPanBar != null) {
if (!mIsRunning) {
mIsRunning = true;
// 开始拨杆进入动画
mViewPanBar.startAnimation(mBarInAnim);
mBtnPlayStart.setVisibility(View.INVISIBLE);//隐藏播放按钮
//播放音乐
MyPlayer.playSong(MainActivity.this,mCurrentSong.getSongFileName());
}
}
}
  • 8、 设置动画监听器。因为这几个动画效果之间具有一定的逻辑,执行的时候具有先后顺序,并且一个动画结束意味着需要进行下一个动画。所以需要监听各个动画的执行。类似的一个动画效果均设置动画监听。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mPanAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
//动画开始执行的时候
public void onAnimationStart(Animation animation) {
}
@Override
//动画结束执行的时候
public void onAnimationEnd(Animation animation) {
//唱片旋转结束后,拨杆退出,恢复原形
mViewPanBar.startAnimation(mBarOutAnim);
}
@Override
//动画重复执行的时候
public void onAnimationRepeat(Animation animation) {
}
});