Android模仿QQ音乐播放旋转的圆形ImageView
2015-09-29 10:35
537 查看
这里会用到背景虚化和圆形的ImageView控件,可以参考我之前的博文。
背景虚化
圆形ImageView
首先继承AnimatorUpdateListener类,对控件状态进行更新,代码如下:
然后声明一个ObjectAnimator对象,一个MyAnimatorUpdateListener对象,核心使用代码如下:
上张效果图:
![](https://img-blog.csdn.net/20150929105349715?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最后附上完整代码,有需要的可以下载研究。
点击下载
背景虚化
圆形ImageView
首先继承AnimatorUpdateListener类,对控件状态进行更新,代码如下:
class MyAnimatorUpdateListener implements AnimatorUpdateListener { public MyAnimatorUpdateListener(ObjectAnimator animator) { this.animator = animator; } /** * 暂停状态 */ private boolean isPause = false; /** * 是否已经暂停,如果一已经暂停,那么就不需要再次设置停止的一些事件和监听器了 */ private boolean isPaused = false; private boolean isPlay = true; /** * 当前的动画的播放位置 */ private float fraction = 0.0f; /** * 当前动画的播放运行时间 */ private long mCurrentPlayTime = 0l; /** * 是否是暂停状态 * * @return */ private ObjectAnimator animator; public boolean isPause() { return isPause; } public boolean isPlay() { return isPlay; } /** * 停止方法,只是设置标志位,剩余的工作会根据状态位置在onAnimationUpdate进行操作 */ public void pause() { isPause = true; isPlay = false; } public void play() { isPause = false; isPaused = false; isPlay = true; } @Override public void onAnimationUpdate(ValueAnimator animation) { /** * 如果是暂停则将状态保持下来,并每个刷新动画的时间了;来设置当前时间,让动画 * 在时间上处于暂停状态,同时要设置一个静止的时间加速器,来保证动画不会抖动 */ if (isPause) { if (!isPaused) { mCurrentPlayTime = animation.getCurrentPlayTime(); fraction = animation.getAnimatedFraction(); animation.setInterpolator(new TimeInterpolator() { @Override public float getInterpolation(float input) { return fraction; } }); isPaused = true; } // 每隔动画播放的时间,我们都会将播放时间往回调整,以便重新播放的时候接着使用这个时间,同时也为了让整个动画不结束 new CountDownTimer(ValueAnimator.getFrameDelay(), ValueAnimator.getFrameDelay()) { @Override public void onTick(long millisUntilFinished) { } @Override public void onFinish() { animator.setCurrentPlayTime(mCurrentPlayTime); } }.start(); } else { // 将时间拦截器恢复成线性的,如果您有自己的,也可以在这里进行恢复 animation.setInterpolator(null); } } }
然后声明一个ObjectAnimator对象,一个MyAnimatorUpdateListener对象,核心使用代码如下:
LinearInterpolator lin = new LinearInterpolator();//声明为线性变化 anim = ObjectAnimator.ofFloat(v, "rotation", 0f, 360f);//设置动画为旋转动画,角度是0-360 anim.setDuration(15000);//时间15秒,这个可以自己酌情修改 anim.setInterpolator(lin); anim.setRepeatMode(Animation.RESTART);//设置重复模式为重新开始 anim.setRepeatCount(-1);//重复次数为-1,就是无限循环 listener = new MyAnimatorUpdateListener(anim);//将定义好的ObjectAnimator传给MyAnimatorUpdateListener监听 anim.addUpdateListener(listener);//给动画加监听 bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Button bt = (Button) arg0; if (isFirst) {//如果是第一次进入或者点击,开始动画 anim.start(); bt.setText("pause"); isFirst = false; } else { if (listener.isPause()) {//不是第一次,则判断当前动画的状态,如果是播放就暂停........ listener.play(); bt.setText("pause"); } else if (listener.isPlay()) { listener.pause(); bt.setText("start"); } } } });
上张效果图:
最后附上完整代码,有需要的可以下载研究。
点击下载
相关文章推荐
- android九宫格解锁
- Android Material Design Library系列教程(四)
- android 手机与单片机之间的蓝牙通信
- (转)那两年炼就的Android内功修养
- android录音监听
- Android M 新的运行时权限开发者需要知道的一切
- 设置Android Studio启动时可选最近打开过的工程
- android截屏
- Android 性能优化之优秀工具以及分析
- Android之px 与 dp, sp换算公式
- Android 使WebView支持HTML5 Video(全屏)播放的方法
- 最流行的android组件大全
- 有哪些 Android 大牛的 blog 值得推荐?
- android线程池
- Android 译文:Android中糟糕的AsyncTask
- MVP实现的步骤梳理
- Android使用UncaughtExceptionHandler捕获全局异常
- android显示一个通知
- 在《Android PorterDuff.Mode图形混合处理 》这篇博客中,我们讲解了PorterDuff.Mode对图形混合的处理。这篇我们将通过图形混合的原理,来制作一个手动擦除蒙版显示底层图片
- Android采用Volley具体的例子展示完整的异步加载数据(一)