一、说明
在该游戏中,中间有一个唱片机会旋转,表示正在播放音乐,配套还有一个唱片杆,配合实现整个唱片机的效果。因此,需要实现动画效果。盘片会旋转,而唱片杆会绕一个固定点旋转。
二、方法
1、首先实现唱片布局。将几个图片进行组合,最终形成一个完整的唱片机布局,包括一个盘片,一个唱片杆,在唱片上放置一个点击按钮,这个按钮需要设置一个点击效果,即小结(二)的内容。
2、这个布局是一个子布局,这个布局需要在主布局里进行include.
3、引入动画类Animation,LinearInterpolator.
//盘片
private Animation mPanAnim;
private LinearInterpolator mPanLin;
//拨杆
private Animation mBarInAnim;
private LinearInterpolator mBarInLin;
4、在res中新建anim文件夹,设置动画效果文件,如下为盘片旋转效果。
`
<?xml version=”1.0” encoding=”utf-8”?><rotate
android:duration="2400" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:repeatCount="3" //重复次数为3次 android:toDegrees="359" /> 旋转角度360
- 5、在该文件夹下,设置拨杆的动画效果。由于拨杆进入和退出时两种不同的动画,所以要定义两个文件。
- 6、在java代码中,进行动画初始化。
```java
mPanAnim = AnimationUtils.loadAnimation(this,R.anim.rotate);
mPanLin = new LinearInterpolator();
mPanAnim.setInterpolator(mPanLin);
- 7、由于动画效果,是通过点击盘片上的按钮来实现切换的,而动画效果是配合播放按钮来体现的,因此动画效果的开始和结束应该在按钮的点击事件中进行处理。也因此,需要先初始化一个按钮(imageButton),并设置其点击事件。
//播放按钮事件
private void handlePlayButton() {
if (mViewPanBar != null) {
if (!mIsRunning) {
mIsRunning = true;
// 开始拨杆进入动画
mViewPanBar.startAnimation(mBarInAnim);
mBtnPlayStart.setVisibility(View.INVISIBLE);//隐藏播放按钮
//播放音乐
MyPlayer.playSong(MainActivity.this,mCurrentSong.getSongFileName());
}
}
}
- 8、 设置动画监听器。因为这几个动画效果之间具有一定的逻辑,执行的时候具有先后顺序,并且一个动画结束意味着需要进行下一个动画。所以需要监听各个动画的执行。类似的一个动画效果均设置动画监听。
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) {
}
});