日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

5角星画法 android,Android Canvas绘制正多边形和正多角星

發(fā)布時間:2023/12/18 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5角星画法 android,Android Canvas绘制正多边形和正多角星 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

頂點(diǎn)數(shù)在<5時沒有正多角星,頂點(diǎn)數(shù)>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 外頂點(diǎn)數(shù)

* @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的參數(shù)為弧度,使用起來不方便,重新封裝一個根據(jù)角度求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);

}

}

效果如下:

總結(jié)

以上是生活随笔為你收集整理的5角星画法 android,Android Canvas绘制正多边形和正多角星的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。