本文阅读大约十分钟

此文章来源于星友的提问,关于自定义View一个车机上的音场效果设置,星球提问是免费的,感谢老哥赞赏的鸡腿~,写文章不易,分析原理到实现效果也是要花费一些时间和精力,不过大家加入星球,肯定能学到有用的东西,最起码不用去水群问问题,我的星球有我专门的提问回答区,基本上都能得到满意的答案,欢迎加入我的知识星球【Hi Android】

我们要想实现一个效果肯定是要剖析效果图的一些元素,实际上这些喇叭和背景图,都是可以通过后期的布局来实现,那么我们真正实现的,其实是一个固定坐标轴以及圆点的触摸控制,这里可以区别为:背景矩阵(要计算),小红点(实时移动)以及固定的横竖两根,那我们开始吧~

首先绘制横竖两根线条,这个比较简单,通过View的高宽确定坐标轴即可

如果你不太清楚坐标轴的划分的话,这里给你画个图,你应该就清晰了

我们也可以看到效果图:

好吧,我们继续,现在绘制一下小红点,小红点绘制起来很简单,这里你可以使用图片,也可以自己绘制圆形,我这里自己绘制一个圆形:

圆点的比较直接了,首先我定义了moveX和moveY,因为他会移动,所以这两个也是动态的,而默认则是View的宽高各一半,当然,他的画笔需要设置Style为FILL_AND_STROKE才会填充,那么我们来画图解释一下:

到此,我们就可以看到效果图了:

那么接下来我们就要开始来制定具体的逻辑了;

1.点击View的区域内,红点移动到对应位置

2.根据红点移动的位置,来计算是哪个象限以及计算出喇叭的值

3.通过接口将最终的结果抛出

我们先来实现第一个需求吧,第一个需求不难,只要监听触摸事件即可,我们来看下

在我们的ACTIon_DOWN中,只要将对应的坐标实时更新,然后刷新View即可办到,如图:

但是这里有一个问题,就是因为坐标和中心点会充电,导致有这样一种现象:

我可以把小圆点移动到一些边边角角上去,这就不好了,那么我们开始优化一下:

这是优化的代码,优化起来不难,但是你解读起来就需要理解这些绘图的关系了,我们结合画图来分析:

如图所示,我们的左上,右上,左下的逻辑,当然,我们也可以使用拖动小红点来实现一些逻辑,不过没必要,我们继续往下看,根据红点移动的位置,来计算是哪个象限以及计算出喇叭的值。

这里要说一个逻辑,那就是喇叭的阈值为 0 - 20 ,我们现在居中,才是 10,如果我们选择了某一个点,那么他的计算也是不同的,这里我们可以归类一个这样的算法:

1.由于居中才是默认值,都是10

2.移动小红点,四个喇叭都需要修改值

3.我们怎么区分喇叭的值

同样的根据横竖坐标,View的高宽 / 20 即可得到对应值,我们来看图吧,看图就能理解了

那么我们现在着手开始实现代码吧:

开开心心实现了这部分代码,然后发现还是有问题的,比如图中的黄色标点,得到的结果是:

喇叭1:16

喇叭2:3

喇叭3:2

喇叭4:17

问题就处在这个喇叭三上,很明显喇叭三其实不可能只有2的,但是根据我们的计算公式 moveY / (viewHeight / 20) 得到的结论又..... 这里我们就发现问题了,不能这样算,而是应该算对角线,我们来看图:

每个象限的计算公式如下,那么我们如何计算呢?这里可以利用勾股定理来计算三角形斜边,但是在代码中实现有些费尽,我们可以这样来计算,通过两个坐标的x - x与 y - y 即可:

pow() 方法可返回 x 的 y 次幂的值,利用这个等式我们来计算:

代码生成的图片阅读性不是很好,可以自行下载Demo,我们看到四个象限我们分别进行了计算,并且做了居中的规避,现在我们可以实现我们刚才未实现的第三个步骤通过接口将最终的结果抛出了

定义一个接口

然后对外抛出,最后的效果:

到此,其实本篇就结束了,这里我的思路还是以矩形为例,实际上正常情况下一般都是正方形,并且绘制好了网格的,相比较而言,绘制View倒是没什么难度,主要是计算这些区域的值,可能颇为麻烦,我也不能保证我这个就是最优的办法,只能说是提供一种思路而已,并且网格的绘制我希望大家自己实现,只需要遍历一下即可,大家自己思考而不是照搬代码,有学习才有进度,好了,相关的PPT和源码可以在下方下载:

链接:https://pan.baidu.com/s/1W7A8DT-NzCP8IUpIn5hgTg

提取码:9q8e

有兴趣的可以加入我的知识星球哦,只要点击阅读原文即可哦~

关于知识星球的介绍可以在公众号点击右下角的【和我学习】或者公众号发送【Hi Android】【知识星球】都可以。

自定义View实现车载音场设置效果相关推荐

  1. Android 抖音爱心动画,Android自定义View实现抖音飘动红心效果

    本文实例为大家分享了Android自定义View实现抖音飘动红心效果的具体代码,供大家参考,具体内容如下 自定义View--抖音飘动红心 效果展示 动画效果 使用自定义view完成红心飘动效果 Vie ...

  2. android 自定义红心,Android自定义View实现抖音飘动红心效果

    本文实例为大家分享了Android自定义View实现抖音飘动红心效果的具体代码,供大家参考,具体内容如下 自定义View--抖音飘动红心 效果展示 动画效果 使用自定义view完成红心飘动效果 Vie ...

  3. 自定义View:仿抖音直播点赞效果

    目录 一.效果图 1.第一版本:在屏幕底部开始显示 2.第二版本:点击任意位置都可以显示 3.第三版本:给任意控件添加点赞效果 二.代码 1.第一版本代码 源码: 示例: 2.第二版本代码 源码(主要 ...

  4. 【自定义View】抖音网红文字时钟-上篇

    源码地址 抖音网红文字时钟-TextClockView 起源 周末在家刷抖音的时候看到了这款网红时钟,都是Android平台的,想来何不自己实现一把.看抖音里大家发的视频,这款时钟基本分两类,一类是展 ...

  5. android代码实现手机加速功能,Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...

  6. android 车辆轨迹,Android自定义view实现车载可调整轨迹线

    本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下 同事做的view,拿过来做个记录. /** * */ package com.text.myv ...

  7. 自定义View | 仿QQ运动步数进度效果

    项目GitHub地址 思路 固定不动的蓝色大圆弧 动画变动的红色小圆弧 中间的步数文字显示 相关的自定义属性 比如固定不动的大圆弧, 我们不能写死他的蓝色颜色属性, 要提供一个颜色的自定义属性给用户自 ...

  8. 安卓仿苹果音量调节_android自定义view仿照MIUI中音量控制效果

    先看效果图: 这就是miui中的音量效果图,实现思路是自定义视图,绘制圆环,然后设置进度显示. 核心代码在onDraw中实现如下: @Override protected void onDraw(Ca ...

  9. android自定义radiogroup,Android 自定义View实现任意布局的RadioGroup效果

    前言 RadioGroup是继承LinearLayout,只支持横向或者竖向两种布局.所以在某些情况,比如多行多列布局,RadioGroup就并不适用 . 本篇文章通过继承RelativeLayout ...

最新文章

  1. 目前python主要应用领域零售_python3读取HDA零售企业数据(一)
  2. oracle命令导入表
  3. mysql 修改max_connections
  4. JAVAEE慕课网项目需求分析
  5. 【英语-刘晓艳-词汇】词汇06
  6. 马杰c语言程序设计基础,【我校自编教材】程序设计基础(C语言版)
  7. Android安卓|安卓概述、安卓开发、安卓入门、安卓架构
  8. Hadoop学习总结(1)——大数据以及Hadoop相关概念介绍
  9. 4.3 createjs
  10. FFMPEG合两帧YUV420P为一帧
  11. 大厂面试必备之设计模式:漫画适配器模式
  12. matlab对离散曲线积分,matlab实现曲线积分
  13. 用c语言实现BF算法
  14. @@identity
  15. 快手私信名片如何制作?
  16. 关于绿色建筑的发展促进,从技术厂家角度我们这么看!
  17. 基于单幅图像的2D转3D算法研究
  18. 【漆学军】分享一个自定义K线的指标的源码
  19. 1NF,2NF,3NF,BCNF范式(学习笔记)
  20. (c语言)字符串的大小写字母转化函数

热门文章

  1. 关于版本升级的一点理解(VersionUpdate)
  2. 蝎虎六看见蚁羊——博山话版笑话 ^_^
  3. 细雨湿衣看不见,闲花落地听无声
  4. 紧急下架,AI以假乱真学明星唱歌;哈佛法学院专家谈AI和版权法
  5. vue中生成corn表达式
  6. vue-baidu-map 百度地图的使用
  7. 质子交换膜(PEM膜电极)、阴阳极催化层和阴阳极催化层
  8. Relational Graph Attention Network for Aspect-based Sentiment Analysis
  9. 国产测试先锋北京凯云联创-为装备测试保障护航
  10. 基于Python的人脸表情管理系统