android 五角星坐标,GitHub - Mingyueyixi/StarView: 安卓星星视图,支持三角星、四角星、五角星到任意多个角(Angular) 的星星View。...

本文主要是介绍android 五角星坐标,GitHub - Mingyueyixi/StarView: 安卓星星视图,支持三角星、四角星、五角星到任意多个角(Angular) 的星星View。...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

StarView

简述:关于星星的View,满足你对所有个角的星星的幻想。

描述

项目包括StarView,StarDrawable,PathStarView。

StarView由普通图片绘制而成。

StaDrawable是一个Drawable类。支持任意多个角(Angular)。

PathStarView 支持任意多个角(Angular) 的星星View。

[注]

为支持任意多个角度的星星,经过了一系列复杂的数学运算,这将在文末有说明。

预览

它们的效果如下。

c0f0ba1f12fd1de70e47b3148050b88b.png

StarView

e027ae67735e50b0d6138b99115ad381.png

StarDrawable

74c7c533327688e4d0e716ae0955217d.png

PathStarView

ef8737aeb5eac0073aa7e4cae7516e37.png

PathStarView -- depth参数

984aa103ee9613070942e6a17a28d82e.png

PathStarView -- rotate参数

55b6eb17564cc81d768a27995fb02a97.png

PathStarView -- size参数

7ce0098da8bf7fa6294fa634b1b4a236.png

PathStarView -- horm参数

fbaf29660725230fa3c7f67c6955d12e.png

PathStarView -- 综合效果

相关算法说明

正多角星

多角星星在计算时,通过圆内接正多边形减去特定弧度的三角形而成,因此,这样的星星被我称为正多角星。

至于非正多角星。因为可以随手画出,不能归纳为数学函数。因此,不做研究。

涉及公式

涉及最多的是圆的函数公式,衍生的公式(弧的计算,三角函数等),以及勾股定理。

推导图

Android的屏幕坐标与常规坐标不同,其Y轴完全相反,在计算上会带来一定的困惑性。

下面是我计算正多角星的图解:

mind_picture.png

我们需要将正多角星星的每一个顶点坐标计算出来。

并且,我们需要推导出一个公用的坐标公式,这个坐标公式能够表示任意一个正多角星的顶点坐标。

代码实现

在实现过程中,我曾经通过计算出弧或三角形rpf的面积,接着通过Android的图片模式(Xfermode混合模式),循环一周,旋转固定角度相减而得到正多边形。这么做理论上行的通,实际效果则会导致存在1像素的空白线条间隙。所以,最后采用的办法是计算出所有坐标。

核心代码实现:

public class StarPathUtil {

/**

* 连接路径

*/

public static Path linePath(double r,int hormCount,@FloatRange(from=0,to =1) float depth){

Path starPath = new Path();

double sOrs = Math.PI * (90 - 180.0 / hormCount) / 180;//角arf的弧度

double sPro = (1.0 - depth) * sOrs;//角pra的弧度

double sPrs = depth*sOrs;//角prs的弧度

//圆内接正多边形边长公式2r*sin(180/n);rs = 边长/2

double lRs = r * Math.sin(Math.PI / hormCount);

double pr = lRs/Math.cos(sPrs);

//p点坐标

double pX = pr * Math.sin(sPro);

double pY = pr * Math.cos(sPro);

starPath.moveTo(0,0);

/**

* 已知圆心o(a,b),R(x,y),求R点顺时针移动c弧度后的坐标

* x'=(x-a)cos(-c)-(y-b)sin(-c)+a

* y'=(y-b)cos(-c)+(x-a)sin(-c)+b

*

* 此处坐标非正常坐标,为逆时针旋转,a=0,b=r,故:

* x' = x*cos(c) - (y-r)sin(c)

* y' = (y-r)cos(c) + x*sin(c)+r

*/

//循环求出每旋转c==PI*(360/hormCount)/180弧度后r点和p点的坐标,并构建为路径

for (int i = 0;i

double c = i*2*Math.PI/hormCount;

double sin_c = Math.sin(c);

double cos_c = Math.cos(c);

//r(0,0)>>R(x,y)

float rX2 = (float) (r*sin_c);

float rY2 = (float) (-r*cos_c + r);

//p(pX,pY)>>R(x,y)

float pX2 = (float) (pX*cos_c - (pY - r)*sin_c);

float pY2 = (float) ((pY - r)*cos_c + pX*sin_c +r);

starPath.lineTo(rX2,rY2);

starPath.lineTo(pX2,pY2);

Log.e("测试","r("+rX2+","+rY2+") , p("+pX2+","+pY2+")");

}

starPath.close();

Matrix m = new Matrix();

//旋转角度

// m.setRotate(rotate);

//计算时坐标系平移(r,0),现路径整体平移过去,以符合坐标系。

m.setTranslate((float) r,0);

starPath.transform(m);

return starPath;

}

}

其他

这个计算可能存在其他方式,期待能看到其他的算法实现。

项目仅仅能跑而已,代码结构等还有待改进。

这篇关于android 五角星坐标,GitHub - Mingyueyixi/StarView: 安卓星星视图,支持三角星、四角星、五角星到任意多个角(Angular) 的星星View。...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493084

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存