日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2023/12/18 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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绘制正多边形和正多角星的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。