参考文章:
效果图
资源1(当前用的是这个)
资源2
思路:准备2张图片,1张是圆盘碟片,1张是指针图片。播放的时候圆盘碟片开始旋转,指针图片旋转一定角度到圆盘碟片上;暂停则圆盘碟片停止旋转,指针图片旋转一定角度离开圆盘碟片图片,再次播放的时候圆盘碟片是恢复上次旋转的角度,调用resume方法。
复制代码
ObjectAnimator mAlbumAnimator;ObjectAnimator mAlbumPointerAnimator; protected void onCreate(@Nullable Bundle savedInstanceState) {initAnim();} private void initAnim() { //专辑圆圈的动画 mAlbumAnimator = ObjectAnimator.ofFloat(mAlbumBgIv, "rotation", 0f, 360f); mAlbumAnimator.setDuration(10000); mAlbumAnimator.setRepeatCount(-1); mAlbumAnimator.setRepeatMode(ValueAnimator.RESTART);//动画重复模式 mAlbumAnimator.setInterpolator(new LinearInterpolator());//匀速旋转}private void onMediaPlayingChanged(AppManager.MediaState mediaState) { boolean isPlaying = mediaState.isPlaying; if (isPlaying) { albumPointAnimPlay(); if (mAlbumAnimator.isPaused()){ mAlbumAnimator.resume(); } if (!mAlbumAnimator.isRunning()){ mAlbumAnimator.start(); } } else { albumPointAnimPause(); mAlbumAnimator.pause(); }}//指针private void albumPointAnimPause() { Log.d(TAG, "albumPointAnimPause: " + mAlbumPointerIv.getRotation()); mAlbumPointerAnimator = ObjectAnimator.ofFloat(mAlbumPointerIv, "rotation", mAlbumPointerIv.getRotation(), -30f); mAlbumPointerAnimator.setDuration(1000); mAlbumPointerAnimator.start();}private void albumPointAnimPlay() { Log.d(TAG, "albumPointAnimPause: " + mAlbumPointerIv.getRotation()); mAlbumPointerAnimator = ObjectAnimator.ofFloat(mAlbumPointerIv, "rotation", mAlbumPointerIv.getRotation(), 0); mAlbumPointerAnimator.setDuration(1000); mAlbumPointerAnimator.start();}复制代码