引言

该旋转界面主要是仿照IOS酷狗版的旋转界面来实现,本项目通过结合ValueAnimator、Rotation、PivotX和PivotY来实现,目前主要实现了左旋转和右旋转,该功能主要是在我的乐乐音乐播放器里面使用,其项目地址如下:https://github.com/zhangliangming/HappyPlayer5.git 。

需求在界面上左右滑,View的角度根据手势移动。

只拦截左右滑动,上下方向的滑动无影响。

子View的左右滑动事件无影响。

预览图

实现思路RotateLayout:左右旋转View

onInterceptTouchEvent:该方法只要做左右移动拦截,上下移动不拦截。

ValueAnimator:该动画只要改变RotateLayout View的角度位置,在ACTION_UP和界面打开时调用。

ACTION_MOVE时,根据移动的X位移,修改RotateLayout的角度。

角度算法:先确定旋转view的旋转中心为Q(width/2,height*1.5),然后根据第一次触摸时,该触摸点在屏幕上面的AXY(ax,ay)坐标,根据A点和Q点,计算出该次的夹角A。滑动时,同理计算滑动时的BXY(bx,by)坐标,计算出B点和Q点的夹角B,通过B - A,可以得出view的旋转度数。计算夹角时,可以使用tan来计算,如果计算出来的夹角为负数时,需要+180来得到真正的夹角。

注意,需要activity开启硬件加速,动画才流畅。

主要代码分析

onFinishInflate

该方法只要实现两种方式,一种是通过布局xml文件来初始化RotateLayout;另外一种是新new RotateLayout。

onLayout

该方法只要是在初始化成功之后,修改RotateLayout的角度。

onInterceptTouchEvent

该方法只要是拦截左右移动和判断是否在左右不拦截的子View集合里面。

onTouchEvent

该方法只要在用户左右移动的时候,修改RotateLayout的角度。

该方法只要是ACTION_UP的时候,需要判断当前RotateLayout当前的角度,如果小于关闭窗口的标志值,则角度还原0.否则关闭view.

android 酷狗demo_Android仿酷狗旋转界面功能-自定义控件实现相关推荐

  1. android 酷狗demo_Android仿酷狗皮肤预览界面的实现(利用canvas缩放的原理)

    GitHub_ AnJiaoDe/Scale-Master APKdemo_ AnJiaoDe/Scale-Master/blob/master/app/build/outputs/apk/app-d ...

  2. android 酷狗demo_Android仿酷狗音乐SeekBar——样式篇

    Android仿酷狗音乐SeekBar 需求:仿酷狗音乐SeekBar 直接上图,上代码 1903148-676fcbf2e5048392.png 1903148-d3e5ab81fa2acd42.p ...

  3. android 酷狗demo_Android仿酷狗音乐自定义侧滑菜单控件简单实现

    随着Android的不断成熟,许多绚丽的效果也在不断的被大家开发出来,其中侧滑的效果用到的项目很多,用的好的更是给吸引了很多用户.国内像QQ和酷狗App的侧滑就很给力,所以查了一些资料,并结合View ...

  4. 酷狗 java_java仿酷狗音乐播放器(菜鸟+实现部分功能)

    话不多说,上图. 部分代码说明: 主函数: package EnterProgramClass; import javax.swing.UIManager; import javax.swing.Un ...

  5. Android涂鸦框架Doodle——仿微信图片编辑(多功能画板)

    前言 很久之前做了一个叫Graffiti的涂鸦项目,放在了github上,得到了不少朋友的反馈,也一直有去维护.限制于个人能力水平,一开始并没有过多考虑框架的问题,导致越到后面,代码越臃肿,添加新功能 ...

  6. 【Android】快速实现仿美团选择城市界面,微信通讯录界面

    概述 本文是这个系列的第三篇,不出意外也是终结篇.因为使用经过重构后的控件已经可以快速实现市面上带 索引导航.悬停分组的列表界面了. 在前两篇里,我们从0开始,一步一步实现了仿微信通讯录.饿了么选餐界 ...

  7. Android例子源码仿支付宝手势密码的功能实现

    本项目是一个仿支付宝手势密码部分的源码,项目在1280×720分辨率上显示有问题,在 854x480上没有问题,项目编码UTF-8默认编译版本4.4.2,实现思路: 1.要用一个类来表示这9个点中的第 ...

  8. 安卓网易云信实现仿QQ双方聊天界面功能(附UI界面

    代码实现的过程中参考了博客上几篇优秀的文章和其中的代码,本想放连接但是找不到了,如果大佬们看见了可以告知我,感谢大佬们.因为各种原因,没有使用网易云信自带的UI库,有兴趣的大佬可以试试,也在开发者文档 ...

  9. android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    简介 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

最新文章

  1. 【Java】剑指 Offer II 022. 链表中环的入口节点
  2. 5G NR-U — Overview
  3. golang LMDB入门例子——key range查询
  4. 在 Eclipse 中使用 Maven 构建 Web 项目
  5. 论初次修改 Android framework 代码
  6. Altium designer不显示飞线的三种方法
  7. JavaWeb第一讲 Servlet的工作原理及生命周期
  8. 开源工具 @sap/ux-ui5-tooling 介绍
  9. SQL SERVER 中identity
  10. tortoisegit图标消失_TortoiseGit文件夹和文件图标不显示解决方法
  11. 【数据库系统】过程化和非过程化语言的相对优点
  12. luogu_P3345[zjoi2015]幻想乡战略游戏
  13. html5经纬度 ios,iOS 如何根据经纬度来定位位置(示例代码)
  14. Android java和C的Socket通信demo(可用)
  15. 【Monogdb】MongoDB之十大应用设计技巧
  16. 男子虚构身份骗同窗网敌百余万
  17. android系统与苹果手机号码,苹果手机号码怎么导入另一个手机安卓(全程图解其操作流程)...
  18. 002柿饼派GUI模组学习之AnimatedImage控件调试
  19. 【小程序】使用wxParse解析html
  20. c8815 android os,华为c8815刷机包 乐蛙OS5 完美版 0823期

热门文章

  1. matlab调用c++生成dll32位与64位对应关系
  2. 杭电ACM刷题(1):1002,A + B Problem II
  3. cocoa mysql_基本MySQL查询
  4. 图的dfs非递归_如何理解恶心的递归
  5. bogofilter notes
  6. 手挽手带你学React:三档 React-router4.x的使用
  7. [不屈的复习] - 编辑工具IDE选取与Hello World
  8. python处理u开头的字符串
  9. 17、加密解密技术介绍
  10. valgrind基础