从我的 "慕课-手记" 中搬过来  

作者: stone86 
链接:http://www.imooc.com/article/14599

来源:慕课网

支付宝芝麻信用分-分析中,有个正五边形,刚刚有空试着做了下
效果图:

分析图:

实现原理、步骤:
已知半径为R,圆心点O(a,b),点A(a, c=b-R), OA=OB=R,圆心角O的度数
1) 求出弦AB的长度
2) 利用两点间距离公式,得到两个方程AB、OB相关的,解出y的值
3) 将y代入其中一个方程,解出x的值 (我这里代入的是AB的方程)
4) 利用canvas旋转,循环绘制

源码如下:

package com.stone.canvaspath.zhima;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;/*** 正N边形* author : stone* email  : aa86799@163.com* time   : 2016/11/17 14 12*/public class ZhimaView extends View {private Paint mPaint;private float mR, mCx, mCy;private static final int mN = 9;private static final float DEGREES_UNIT = 360 / mN; //正N边形每个角  360/mN能整除public ZhimaView(Context context) {this(context, null);}public ZhimaView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ZhimaView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);mPaint = new Paint();}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);float mW = getMeasuredWidth();float mH = getMeasuredHeight();mCx = mW / 2;mCy = mH / 2;mR = Math.min(mCx, mCy) / 4 * 3;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mPaint.setColor(Color.BLUE);mPaint.setStyle(Paint.Style.STROKE);float d = (float) (2 * mR * Math.sin(Math.toRadians(DEGREES_UNIT / 2)));float c = mCy - mR;float y = (d * d + mCy * mCy - c * c - mR * mR) / (2 * (mCy - c));float x = (float) (mCx + Math.sqrt(-1 * c * c + 2 * c * y + d * d - y * y));for (int i = 0; i < mN; i++) {canvas.save();canvas.rotate(DEGREES_UNIT * i, mCx, mCy);canvas.drawLine(mCx, mCy, mCx, c, mPaint);canvas.drawLine(mCx, c, x, y, mPaint);canvas.restore();}}
}

Android 自定义View 绘制正N边形相关推荐

  1. android自定义弧度按钮,Android 自定义View 绘制六边形设置按钮

    今天逛酷安的时候,发现酷安的设置按钮(截图的右上角),是一个六边形 + 中心圆的图标,所以又是一个自定义View练习对象了.画圆很简单,知道半径即可,而重点就在画出六边形. 酷安截图.png 最终效果 ...

  2. Android自定义View绘制闹钟

    Android自定义View绘制闹钟 本文简单实现了一个闹钟,扩展View,Canvas绘制 效果如下: 代码如下: package com.gaofeng.mobile.clock_demo;imp ...

  3. Android 自定义View绘制电池图标

    /*** @anthor GrainRain* @funcation 自定义View绘制电池* @date 2019/8/27*/ public class DrawBatteryView exten ...

  4. Android自定义View绘制流程

    Android视图层次结构简介 在介绍View绘制流程之前,咱们先简单介绍一下Android视图层次结构以及DecorView,因为View的绘制流程的入口和DecorView有着密切的联系. 我们平 ...

  5. android 自定义View绘制电池电量(电池内带数字显示)

    最新公司需要一个电池内带数字的显示电池电量需求,百度了一下.参考下面这篇文章写的Android自定义View之电池电量显示. 增加了里面电池电量数字显示,还有就是一个屏幕适配.不管屏幕分辨率基本都能适 ...

  6. android画a4矩形,Android自定义View绘制原理:画多大?画在哪?画什么?(三)

    View绘制就好比画画,抛开Android概念,如果要画一张图,首先会想到哪几个基本问题: 画多大? 画在哪? 怎么画? Android绘制系统也是按照这个思路对View进行绘制,上面这些问题的答案分 ...

  7. Android自定义View绘制闪闪发光的文字

    如何实现类似网页效果中闪闪发光的文字,通过自定义View可以实现这一炫酷效果 1.自定义View public class FlickTextView extends TextView {privat ...

  8. Android 自定义View绘制的基本开发流程 Android自定义View(二)

    1 View绘制的过程 View的测量--onMeasure() View的位置确定--onLayout() View的绘制--onDraw() 2 View的测量--onMeasure() Andr ...

  9. Android 自定义View 绘制五角星

    背景 之前写过的App里有评分的功能,而显示评分一般使用系统的RatingBar再加自定义,一切都很完美,但是产品提了一个需求,例如4.6.4.7.5.8分,不要显示为4个星星加一个半星(4.5分), ...

最新文章

  1. RHEL 5 密码破解和防止别人通过单用户模式修改密码
  2. 0001242: Steps to make RealTek DVB-T USB dongle...
  3. DataGirdView 编辑项时的验证
  4. java学习(127):finally语句
  5. java setpriority_Java TaskEntity.setPriority方法代碼示例
  6. 巨杉数据库 CTO 王涛:新一代分布式数据库
  7. JAVA处理模型的步骤,java-处理模型中条件字段的最佳方法
  8. dhcp协议_什么是DHCP?总结DHCP优缺点和工作原理
  9. uncheck关键字
  10. [大话设计模式C++版] 第7章 为别人做嫁衣 —— 代理模式
  11. Hitting Set 碰撞集问题
  12. 算法导论 — 4.4 用递归树方法求解递归式
  13. C++:应用有限差分法求解随时间变化 平流方程 ut = - c * ux 在一个空间维度上,与 恒定速度,使用FTCS方法,正向时间差, 居中空间差(附完整源码)
  14. idea中设置jdk
  15. 【送谷歌定制礼品】一起寻找最初的写作热忱 即刻动笔!
  16. 前端UI配色辅助HTML源码
  17. Java-正则表达式:匹配特定字符开头,数字结尾的任一字符串
  18. php900塞孔油墨_HDI树脂油墨塞孔工艺研究
  19. galgame 游戏动画汉化(动画外挂字幕)和字幕合成方法
  20. TopXGun拓攻植保飞控T1-A新品发布会在南京盛大开幕

热门文章

  1. python lib库_python标准库pathlib常见操作
  2. OCR识别-证件识别
  3. 数据存储中说的多少G是什么意思
  4. 为什么maven没有3.7的版本
  5. 不只是电商,苏宁打通全供应链的野望
  6. Android AOSP基础(三)Android系统源码的整编和单编
  7. Python编程基础与应用(陈波著)微实践
  8. 【翻译1】Multivariate Time Series Forecasting with LSTMs in Keras——PM2.5
  9. 时空大数据与众包计算学习总结
  10. 新版本微信如何解绑手机号?