imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="唱片机" title="">

有一段时间没有更新文章了,记得上一篇文章讲的是《用ClipDrawable实现音频录制麦克风讲话效果》,用户反响也都还不错,自己也是深受鼓励。事实上从那之后就一直想写一篇关于RotateDrawable的文章,原因非常easy。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,事实上我们的今天要用到的几张素材非常easy,会简单的PhotoShop操作基本就都能够做出来:

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="唱片机" title="">

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

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="唱片PS图" title="">

如上面两张截图显示的一样,我制作素材的图片的大小是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>

imageMogr2/auto-orient/strip" alt="实现效果图" title="">

附上一张效果图,须要源代码的小伙伴也能够点击这里下载哦!!

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

用RotateDrawable实现网易云音乐唱片机效果的更多相关文章

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

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

  2. Android ScrollView滚动实现大众点评、网易云音乐评论悬停效果

    今天听着网易云音乐,写着代码,真是爽翻了. http://blog.csdn.net/linshijun33/article/details/47910833 网易云音乐这个产品亮点应该在评论这一模块 ...

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

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

  4. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  5. Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM

    效果 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS Swift云音乐专栏. 目简介 这是一个使用Swift(还有OC版本)语言,从0开发一个iOS平台,接近企业 ...

  6. OC高仿iOS网易云音乐AFNetworking+SDWebImage+MJRefresh+MVC+MVVM

    效果 因为OC版本大部分截图和Swift版本一样,所以就不再另外截图了. 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS云音乐专栏. 目简介 这是一个使用OC语言 ...

  7. 模拟制作网易云音乐(AudioContext)

    记得好早前在慕课网上看到一款可视化音乐播放器,当前是觉得很是神奇,还能这么玩.由于当时刚刚转行不久,好多东西看得稀里糊涂不明白,于是趁着现在有时间又重新梳理了一遍,然后参照官网的API模拟做了一款网易 ...

  8. 网易云音乐APP分析

    网易云音乐-感受音乐的力量 你选择的产品是?  网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...

  9. Flutter仿网易云音乐:播放界面

    写在前头 本来是要做一个仿网易云音乐的flutter项目,但是因为最近事情比较多,项目周期跨度会比较长,因此分几个步骤来完成.这是仿网易云音乐项目系列文章的第一篇.没有完全照搬网易云音乐的UI,借鉴了 ...

随机推荐

  1. 转帖:向开源项目贡献源码(以 Orchard 为例)

    原文地址:http://yangw80.blog.163.com/blog/static/247518002201552692516908/ 在开源项目满天飞的时代,仅仅把开源项目拿来用是不够的,要适 ...

  2. Orchard之在前台显式一个属于自己的列表

    一:当前现状 Orchard 并不提供筛选 Owner 的 Query,但是 Gallery 中有提供,那就是:Owner Queries. Install 之,然后在解决方案中引入该 Project ...

  3. Gradle语法基础解析

    在从ADT转移到AndroidStudio下开发,必然会遇到Gradle脚本打包的问题.看懂一个脚本最基本的前提就是了解它的语法,我在转移开发环境的过程中,也开始接触学习Gradle,在此做了一些总结 ...

  4. ImportError: No module named caffe.proto解决办法

    原文   https://blog.csdn.net/lanyuelvyun/article/details/73628152 在用自己的数据训练基于caffe的SSD模型的时候,我们需要将图片数据转 ...

  5. 利用ASP.NET运行数据库的安装脚本

    在启明星的演示站点里,经常有用户修改演示密码,导致别的用户无法访问. 为此,在登陆页面,增加了一个“初始化数据库”功能,这样,即使用户修改了密码,别的访问者,只要重置数据库,就可以很容易再次进入. 首 ...

  6. 以双斜杠//开头的URL的含义

    在HTML网页中,有时会发现类似于//www.studyofnet.com/news/1341.html这样的代码,那么,这种以双斜杠//开头的URL的含义是什么呢? 在WEB网页中,有时会发现类似下 ...

  7. Wildcard Matching leetcode java

    题目: Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single charact ...

  8. Backbone.js 使用 Collection

    在前面我们的 Backbone.js 用上了 Model, 但绝大数的情况下我们处理的都是一批的 Model 数据列表,所以需要有一个 Collection 来容纳 Model, 就像 Java 里最 ...

  9. 利用blob对象实现粘贴图片

    blob的一个常用应用场景,就是获取剪切板上的数据来进行粘贴的操作.例如通过QQ截图后,需要在网页上进行粘贴操作. 粘贴图片我们需要解决下面几个问题 1.监听用户的粘贴操作 2.获取到剪切板上的数据 ...

  10. 在Linux下锁住键盘和鼠标而不锁屏

    假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...