仿网易云播放界面圆盘动画的实现
程序员文章站
2022-06-30 20:42:34
...
效果图
动画实现的特点:
转盘旋转,音乐播放时,碟片顺时针360度旋转;音乐暂停,旋转暂停
实现方法
在Activity中要定义动画对象,动画的实现方法是ObjectAnimator
//定义一个动画的对象
private ObjectAnimator discAnimation;
在play()方法中写上动画的方法
//第一个参数用于指定这个动画要操作的是哪个控件
// 第二个参数用于指定这个动画要操作这个控件的哪个属性
// 第三个参数是可变长参数,这个就跟ValueAnimator中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。
//实例化动画对象
discAnimation = ObjectAnimator.ofFloat(discBtn, "rotation", 0f, 360f);
discAnimation.setDuration(20000);//设置转一圈需要的时间
discAnimation.setInterpolator(new LinearInterpolator() );//设置插速器
// AccelerateDecelerateInterpolator()先加速后减速
// /AccelerateInterpolator()开始慢后加速
//AnticipateInterpolator()反向,先向相反方向改变一段再加速播放
//AnticipateOvershootInterpolator()开始的时候向后然后向前甩一定值后返回最后的值
//BounceInterpolator()动画结束的时候弹起
//OvershootInterpolator()向前甩一定值后再回到原来位置
discAnimation.setRepeatCount(-1);//设置旋转次数
discAnimation.setRepeatMode(ValueAnimator.REVERSE);//设置旋转重复模式
discAnimation.start();//开始动画
动画的类型在Android中有四种alpha透明度、rotation旋转、scale缩放、translation平移
插速器:setInterpolator方法
AccelerateDecelerateInterpolator()先加速后减速
AccelerateInterpolator()开始慢后加速
AnticipateInterpolator()反向,先向相反方向改变一段再加速播放
AnticipateOvershootInterpolator()开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator()动画结束的时候弹起
OvershootInterpolator()向前甩一定值后再回到原来位置
LinearInterpolator()匀速
若要实现随着音乐的停止而停止,或随着音乐的播放而转动就需要在判断时加入动画暂停与播放的语句
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.music_prevbtn:
discAnimation.pause();//在点击上一首时转盘停止
position--;
if (position == -1) {
position = Common.musicList.size() - 1;
}
play();
break;
case R.id.music_nextbtn:
discAnimation.pause();//在点击下一首时转盘停止
position++;
if (position == Common.musicList.size()) {
position = 0;
}
play();
break;
case R.id.music_pressbtn:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
pressBtn.setImageResource(R.mipmap.ic_status_bar_play_light_pressed);
discAnimation.pause();//随着音乐的停止而停止
needleAnimation.pause();
} else {
mediaPlayer.start();
pressBtn.setImageResource(R.mipmap.ic_play_btn_pause_pressed);
discAnimation.resume();//判断随着音乐的播放而转动
needleAnimation.resume();
// thread.start();
}
break;
case R.id.music_putdown:
this.finish();
break;
default:
break;
}
}
转盘上方的只针动画与转盘实现的方法基本一致