安卓绘制五角星
16lz
2021-01-26
package com.example.test;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;/** * * 假设五角星外接圆半径为1,有一个角朝上,以五角星中心为原点:外点 x=Rcos(72°*k) y=Rsin(72°*k) k=0,1,2,3,4 内点 r=Rsin(18)/sin(180-36-18) x=rcos(72°*k+36°) y=rsin(72°*k+36°) k=0,1,2,3,4 * @author Young * */public class FiveView extends View {public FiveView(Context context) {super(context);// TODO Auto-generated constructor stub}public FiveView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public FiveView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);// TODO Auto-generated constructor stub}@SuppressLint("NewApi")public FiveView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);// TODO Auto-generated constructor stub} @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int width=getWidth();int r=width/2;canvas.translate(r, r ); Path path=new Path();path.moveTo(0, -r);//Apath.lineTo( r* sin(36), r*cos(36));//Cpath.lineTo( -r*sin(72), -r*cos(72) );//Epath.lineTo( r*sin(72), -r*cos(72) );//Bpath.lineTo( -r*sin(36), r*cos(36) );//Dpath.close(); Paint paint=new Paint();paint.setAntiAlias(true);paint.setColor(Color.YELLOW);paint.setStyle(Style.STROKE);paint.setStrokeWidth(5);canvas.drawPath(path, paint);addCoordinateAndMark(canvas);ff2(canvas);}private void addCoordinateAndMark(Canvas canvas) {// TODO Auto-generated method stubint width=getWidth();int r=width/2;Paint paint=new Paint();paint.setAntiAlias(true);paint.setColor(Color.BLACK);paint.setStrokeWidth(5);canvas.drawLine(-r, 0, r, 0, paint);canvas.drawLine(0, -r, 0, r, paint);paint.setColor(Color.BLUE);paint.setTextSize(30); r=(int) (r*0.9);canvas.drawText("A", 0, -r, paint);canvas.drawText("B", r*sin(72), -r*cos(72), paint);canvas.drawText("C", r*sin(36), r*cos(36), paint);canvas.drawText("D",-r*sin(36), r*cos(36) , paint);canvas.drawText("E", -r*sin(72), -r*cos(72), paint);}/*** * 外点 </br> x=Rcos(72°*k) </br> y=Rsin(72°*k) </br> k=0,1,2,3,4 </br></br></br> 内点 </br> r=Rsin(18)/sin(180-36-18) </br> x=rcos(72°*k+36°)</br> y=rsin(72°*k+36°) </br> k=0,1,2,3,4 </br> * @param canvas */private void ff2(Canvas canvas) {canvas.rotate(-18); float r=getWidth()/2 ;Paint paint=new Paint();paint.setAntiAlias(true);paint.setColor(Color.MAGENTA);paint.setStyle(Style.STROKE);paint.setStrokeWidth(5);Path path=new Path();path.moveTo(r*cos(72*0), r*sin(72*0));for (int i = 1; i <5 ; i++) {canvas.drawText(""+i,r*cos(72*i), r*sin(72*i), paint);path.lineTo(r*cos(72*i), r*sin(72*i));}path.close();canvas.drawPath(path, paint);r=r*sin(18)/sin(180-36-18);paint.setColor(Color.CYAN);path=new Path();path.moveTo(r*cos(72*0+36), r*sin(72*0+36));for (int i = 1; i <5 ; i++) {canvas.drawText(""+i,r*cos(72*i+36), r*sin(72*i+36), paint);path.lineTo(r*cos(72*i+36), r*sin(72*i+36));}path.close();canvas.drawPath(path, paint);}float cos(int num){return (float) Math.cos(num*Math.PI/180);} float sin(int num){return (float) Math.sin(num*Math.PI/180);}}
更多相关文章
- [Android][自定义进度条]④--圆形进度条的onMeasure
- Android——点击水纹效果
- Android设置虚线、圆角、渐变
- Drawable的详解
- Android(安卓)Paint之MaskFilter详解
- 对Android(安卓)canvas的一点粗浅理解
- Android坐标的简单方法介绍
- Android(安卓)实现对话框圆角功能
- Android(安卓)UI效果实现——滑动模糊渐变效果实现