有一段时间没有更新文章了,记得上一篇文章讲的是《用ClipDrawable实现音频录制麦克风讲话效果》,用户反响也都还不错,自己也是深受鼓舞。其实从那之后就一直想写一篇关于RotateDrawable的文章,原因很简单,RotateDrawable其实和上一篇文章中的ClipDrawable很相似。正愁着不知道以什么样的方式向大家介绍,也正是这个原因吧,一直没有发表新的文章。赶巧了,在用朋友手机的时候发现了一款名叫‘网易云音乐’的APP,在主播放页面有一个唱片机的功能感觉不错诶,于是乎,把玩了一番,心想着,何不用RotateDrawable实现这样一个功能呢? 说干就干!!!

老规矩,使用之前我们还是先要来了解一下今天的主角RotateDrawable

RotateDrawable

其实从名字中就不难理解,RotateDrawable一定是一个和旋转有关的Drawable,的确,RotateDrawable可以控制drawable的旋转,在XML文件中定义RotateDrawable对象使用的根元素是< rotate… />元素,该元素包含以下几个重要的属性:

  • android:drawable:指定将要进行旋转操作的Drawable对象。
  • android:visible:视图是否可见,注意默认是false,也就是不可见。
  • android:pivotX:pivotX表示旋转轴心在x轴横坐标上的位置,用百分比表示,表示在当前drawable总宽度百分之几的位置。
  • android:pivotY:同理,pivotY表示旋转轴心在y轴横坐标上的位置,用百分比表示,表示在当前drawable总高度百分之几的位置。
  • android:fromDegrees:fromDegrees表示起始角度,值大于0,则表示顺时针旋转,值小于0,则表示逆时针旋转。
  • android:toDegrees:fromDegrees表示终点角度,同理,值大于0,则表示顺时针旋转,值小于0,则表示逆时针旋转。

之所以说RotateDrawable和ClipDrawable相似,是因为它们两个都可以通过调用方法setLevel(int level)来控制drawable的状态,ClipDrawable可以通过调用方法setLevel(int level)来控制截取区间的大小。同样,RotateDrawable可以通过调用方法setLevel(int level)来控制旋转角度的大小,取值同样是在0~10000之间,可以理解为把起始角度和终点角度之间的角度均等分为10000份,当level等于0的时候处于起始位置,当level等于10000的时候处于终点位置,至于中间部分由level的取值大小来决定。

了解了RotateDrawable的使用原理,那我们就进入正题,如何使用RotateDrawable实现唱片机的效果,首先呢,当然是要准备素材! 素材大家可以到Iconfont下载,有能力的也可以自己PS,其实我们的今天要用到的几张素材很简单,会简单的PhotoShop操作基本就都能够做出来:

注意、注意、一定要注意,重要的事情说三遍:在选择或者制作素材的时候一定要注意一点,因为RotateDrawable是用于drawable的旋转操作,所以关于drawable的中心点位置必须严格要求,否则制作出来的drawable在旋转的时候会十分别扭。

如上面两张截图显示的一样,我制作素材的图片的大小是240x240,唱片的中心点坐标是120x120,也就是pivotX = 50%、pivotY = 50% 。操纵杆的中心点坐标是192x24, 那么pivotX = 80%、pivotY = 10%

那好,既然素材已经准备完成,而且它们的中心点也都确认完毕。紧接着,我们就在XML中定义这两个RotateDrawable:

唱片rotate_cd.xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:pivotX="50%"android:pivotY="50%"android:visible="true"android:fromDegrees="0"android:toDegrees="360"android:drawable="@mipmap/cd" >
</rotate>

操纵杆rotate_hander.xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:pivotY="10%"android:pivotX="80%"android:toDegrees="0"android:visible="true"android:fromDegrees="-30"android:drawable="@mipmap/box_handbar" >
</rotate>

最后,只要将这两个drawable引用到两个相互叠加的ImageView上,并结合线程和属性动画适当的调用ImageView.getDrawable().setLevel(int level)方法就能实现完美的效果啦 !!!

<RelativeLayout    android:layout_width="140dp"    android:layout_height="140dp"    android:background="@mipmap/box_background" ><ImageView        android:src="@drawable/rotate_cd"        android:id="@android:id/progress"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/box_background" />  <ImageView        android:id="@android:id/background"android:layout_width="match_parent"android:layout_height="match_parent"        android:src="@drawable/rotate_hander" />
</RelativeLayout>

附上一张效果图,需要源码的小伙伴也可以点击这里下载哦!!!

如果文中有表述不当或阐述错误的地方,还望正在看文章的您可以帮忙指出,有疑惑呢,也可以在评论中提问或者私信,期待您的意见和建议,欢迎关注交流。

用RotateDrawable实现网易云音乐唱片机效果相关推荐

  1. Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...

     Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...

  2. android 网易云音乐上滑动画,Android 仿网易云音乐 音轨跳动效果

    网易云音乐的Loading效果,大家应该也比较熟悉了,效果是一个红色音轨不断跳动的效果,一般用于Loading等待时填充使用.本篇来自定义这个效果. Android 仿网易云音乐 音轨跳动View.g ...

  3. 微信小程序 --- CSS实现仿网易云音乐播放界面效果(黑胶唱片与唱针纯CSS实现)

    下面代码的效果是网易云音乐唱针和黑胶唱片的CSS效果实现方式,播放等并没贴出来 实现效果的范围 动态图效果预览: stylusW,panW是获取系统宽度计算后的参数 wxml部分: <!-- 黑 ...

  4. axure源文件_Axure教程:实现网易云音乐有声播放效果

    为了方便讲解,我们首先在桌面新建一个文件夹,命名为音乐.1.将自己想要演示播放的MP3音乐文件放在这个文件夹里面.2.给播放页添加一个中继器,随便命名,我给它命名为[音乐地址链接器],用来链接播放本地 ...

  5. ★★★网易云音乐车机版7.4.0.★★★

    是车上听的哈,看到这个需要的人挺多 下载地址:https://mdl.ink/HNKD1s

  6. Android仿网易云音乐:留声机效果

    参考文章: blog.csdn.net/jasper_succ- blog.csdn.net/xiangzhihon- blog.csdn.net/lzq33521/ar- 效果图 资源1(当前用的是 ...

  7. 一起学ReactNative(3) 实现网易云音乐旋转唱片效果

    前言 先看一下整体完成效果 今天主要聊聊 这个唱片的旋转效果如何实现 这个效果实现其实非常简单 先来看一下效果图 如有发现任何问题的 都可以直接加我的QQ:469373256 效果图 红色线:scro ...

  8. 实现一个网易云音乐的 BottomSheetDialog

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  9. Android 贝塞尔曲线实战之网易云音乐鲸云特效,2021程序员进阶宝典

    一阶这个比较简单,因为没有在网上找到可以直接输入数学公式的工具,就手工推导了下. ![在这里插入图片描述](https://img- <Android学习笔记总结+最新移动架构视频+大厂安卓面试 ...

  10. Android 贝塞尔曲线实战之网易云音乐鲸云特效

    作者:哈哈将 -个推 Android 高级开发工程师 前言 APP开发市场已经告别"野蛮生长"时代,人们不再满足于APP外形创新,而将目光转向全方面的用户体验上.在这过程中,动效化 ...

最新文章

  1. 虚拟机下Linux安装图解之一:VMware Workstation的安装
  2. 5、在secureCRT中vi显色
  3. 微软称HTML5是IE 9的核心 要尽快淘汰IE 6
  4. 只会python好找工作吗-转行去培训班学Python好找工作吗?老男孩教育
  5. pycharm 如何搜索?Ctrl+N 搜索py文件 Ctrl+shift+N 搜索所有类型的文件 ctrl+shift+f 全局字符串搜索 ctrl+shift+a 配置项搜索 双shift全局
  6. 从用户反馈的可解释性提升推荐模型
  7. Spark 1.2 编译
  8. 计算机除法和取余在实际运用中的意义
  9. yuv格式转换是那个组织定义的_AI 如何赋能摄像机?这场沙龙为你解锁“软件定义”新概念...
  10. 除了沉迷酒色之外,你还做过什么?
  11. Spring学习笔记-构造和Set方法注入Bean及集合和null值的注入
  12. 【釜底抽薪】谷歌锁喉华为
  13. 我的J2EE成功之路:实战Ajax,JSP,Struts 2, Spring,Hibernate
  14. 基于layui 下拉多选 三级联动省市区demo
  15. BZOJ1753: [Usaco2005 qua]Who's in the Middle
  16. 《程序员的成长课》:增加收入的 3 大方向
  17. Jetson TX2 之 JetPack 3.0 安装小记
  18. [Solved | 已解决] Ubuntu GTX1080Ti 经常崩溃
  19. Shell的基础用法
  20. web安全渗透测试的大纲

热门文章

  1. 实时文件同步软件--端端(Clouduolc)的诞生小记
  2. [SSL_CHX][2021-10-16]Vigenère密码
  3. 5D论文PMF及改进
  4. Windows10下载到U盘怎么安装?
  5. Cesium for UE4 与 3DTiles
  6. flutter仿ReadHub+
  7. 自动驾驶汽车是如何利用高精度地图和高精度定位来进行“导航”的
  8. 建站百科|全网最全、最系统的域名申请教程,不看吃亏!!!
  9. 1.14食油大学acm训练赛NO.6
  10. 华硕重装后进入bios_华硕台式机重装系统win10按哪个键进入bios设置