5角星画法 android,Android Canvas绘制正多边形和正多角星
顶点数在<5时没有正多角星,顶点数>5时正多角星不唯一,本文只绘制最具代表性的一种
代码如下:
public class CanvasStar extends View{
public CanvasStar(Context context) {
super(context);
}
public CanvasStar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CanvasStar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CanvasStar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
paint.setAntiAlias(true);
drawStar(canvas,paint,Color.RED,getHeight()/12,3,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.RED,getHeight()/12,3,true);
canvas.translate(-getHeight()/6,0);
canvas.translate(0,getHeight()/6);
drawStar(canvas,paint,Color.YELLOW,getHeight()/12,4,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.YELLOW,getHeight()/12,4,true);
canvas.translate(-getHeight()/6,0);
canvas.translate(0,getHeight()/6);
drawStar(canvas,paint,Color.GREEN,getHeight()/12,5,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.GREEN,getHeight()/12,5,true);
canvas.translate(-getHeight()/6,0);
canvas.translate(0,getHeight()/6);
drawStar(canvas,paint,Color.CYAN,getHeight()/12,6,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.CYAN,getHeight()/12,6,true);
canvas.translate(-getHeight()/6,0);
canvas.translate(0,getHeight()/6);
drawStar(canvas,paint,Color.BLUE,getHeight()/12,7,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.BLUE,getHeight()/12,7,true);
canvas.translate(-getHeight()/6,0);
canvas.translate(0,getHeight()/6);
drawStar(canvas,paint,Color.BLACK,getHeight()/12,8,false);
canvas.translate(getHeight()/6,0);
drawStar(canvas,paint,Color.BLACK,getHeight()/12,8,true);
canvas.translate(0,getHeight()/6);
}
/**
* 绘制彩色多边形或星形
* @param canvas Canvas画布
* @param paint Paint画笔
* @param color 颜色
* @param radius 外接圆半径
* @param count 外顶点数
* @param isStar 是否为星形
*/
private void drawStar(Canvas canvas, Paint paint, @ColorInt int color, float radius,int count,boolean isStar){
canvas.translate(radius,radius);
if ((!isStar) && count < 3){
canvas.translate(-radius,-radius);
return;
}
if (isStar && count < 5){
canvas.translate(-radius,-radius);
return;
}
canvas.rotate(-90);
if (paint == null){
paint = new Paint();
}else{
paint.reset();
}
Path path = new Path();
float inerRadius = count%2==0?
(radius*(cos(360/count/2)-sin(360/count/2)*sin(90-360/count)/cos(90-360/count)))
:(radius*sin(360/count/4)/sin(180-360/count/2-360/count/4));
for (int i=0;i
if (i==0){
path.moveTo(radius*cos(360/count*i),radius*sin(360/count*i));
}else{
path.lineTo(radius*cos(360/count*i),radius*sin(360/count*i));
}
if (isStar){
path.lineTo(inerRadius*cos(360/count*i+360/count/2),inerRadius*sin(360/count*i+360/count/2));
}
}
path.close();
paint.setColor(color);
canvas.drawPath(path,paint);
canvas.rotate(90);
canvas.translate(-radius,-radius);
}
/**
* Math.sin的参数为弧度,使用起来不方便,重新封装一个根据角度求sin的方法
* @param num 角度
* @return
*/
float sin(int num){
return (float) Math.sin(num*Math.PI/180);
}
/**
* 与sin同理
*/
float cos(int num){
return (float) Math.cos(num*Math.PI/180);
}
}
效果如下:
5角星画法 android,Android Canvas绘制正多边形和正多角星相关推荐
- android 用canvas 绘制简单圆形时钟
写笔记写写不过人家 http://blog.csdn.net/u010575173/article/details/52701936 1,Android - Paint基础 在自定义控件时,经常需要使 ...
- android代码绘制正弦图像,利用Android的Canvas绘制正弦函数图像
一时兴起用android原生的基础绘制工具,绘制了一个正弦(余弦)函数图象,不多说,先上图: MainView.java类 package com.zhaofeng.main; import java ...
- android之canvas绘制矩形
需求:想实现使用canvas绘制矩形 实现如下: @SuppressLint("AppCompatCustomView") public class MyImageView ext ...
- android之Canvas绘制图片
参考 https://blog.csdn.net/u013135085/article/details/81216663 需求:给与一张图片,可以设置大小,绘制出图片 步骤一:加载位图 normalF ...
- Android使用canvas绘制视力表E标
展示视力表中带有方向的E标 返回drawable可以直接展示在view之上 /*** 使用canvas画出E标** @param direction* @return*/ public static ...
- Android里canvas绘制中文
给定一条线,作为穿过文字中间的线,即文字处于该条线中间,居中,取名为center线: 计算 canvas.drawText方法里的y值具体公式:center + (paint.fontMetrics. ...
- Canvas学习:封装Canvas绘制基本图形API
Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习 从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方法, ...
- canvas绘制星空(起手篇)
无图不欢,先上图 <!DOCTYPE html> <html><head><meta name="keywords" content=&q ...
- 自绘动画android,(译)android利用Canvas和几何学绘制几何动画
1 创建圆形动画 首先需要画一些同心圆,并添加动画将同心圆的半径逐渐增加,即从同心圆中心向四周扩散的动画. 需要定义一些属性包括:同心圆间隔.圆线颜色.圆线宽度: 1dp @color/black 1 ...
- android canvas 画按钮,Android 用Canvas轻松绘制一个时钟
接下来这篇文章主要是结束如何轻松自定义一个View并使用Canvas绘制一个时钟的案例,话不多说先上图瞅瞅,一共实现了两种效果,一种是秒动(秒针一秒走一针).另一种是连动式的,秒针不会停会一直走动,话 ...
最新文章
- 连接linux系统软件,Windows系统上有哪些不错的终端软件可以远程连接Linux?
- 获取微软产品下载链接
- POJ - 3190 Stall Reservations(贪心+优先队列优化)
- JS 导出Excel,Word
- 使用foreach循环遍历Collection集合
- 如何应对内网安全的那些新挑战——威胁不断,防御不止
- java当前目录指什么_是什么决定了Tomcat Java进程的当前工作目录?
- 不再惧怕!二叉树结构相关算法总结 | 原力计划
- python世界你好_“你好,世界Python教程
- dsp c语言流水灯程序,DSP流水灯源程序
- oracle如何恢复被误误删除的pdb
- java word书签_java和javascript获取word的 书签位置
- c语言中的output用法,OUTPUT 子句
- 机器学习_正态分布下的贝叶斯分类器
- 怎么恢复格式化的sd卡呢?
- 2021滴滴笔试题算法题
- 怎么提高截屏图片分辨率?照片分辨率低如何做成高清?
- chmod -R 777使用.
- Python求均值,方差,标准差
- 用“埃氏筛法”求2~10000以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。
热门文章
- 浙江大学计算机系自主招生题目,浙江大学自主招生试题
- linux 检测SSD寿命
- python抓取百度指数详解
- 写了一个内核模块实现简单的类似ps命令.
- My Seventeenth Page - 赎金信 - By Nicolas
- 超级计算机 计算化学,计算化学软件使用经验-超算中心.PDF
- Google DFP广告管理系统简介:开始与您的网站进行广告集成
- exchange网易企业邮箱服务器设置,网易企业邮箱Exchange协议邮件客户端配置指南...
- 计算机c盘垃圾,清理电脑C盘垃圾的小妙招
- windows操作系统未关闭默认共享