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绘制正多边形和正多角星的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文献检索与论文写作——学习笔记
- 下一篇: KVM虚拟机扩容硬盘