package com.example.m_evolution.View; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import com.example.m_evolution.MyApp; import static com.example.m_evolution.MyApp.COORDINATE_LENGTH; import static com.example.m_evolution.MyApp.COORDINATE_ORIGIN_X; import static com.example.m_evolution.MyApp.COORDINATE_ORIGIN_Y; import static com.example.m_evolution.MyApp.STR_MOOD; public class CoordinateView extends View { private Paint mPaint; public CoordinateView(Context context) { this(context, null); } public CoordinateView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CoordinateView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new Paint(); mPaint.setColor(Color.BLACK); mPaint.setAntiAlias(true); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(4); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint_coordinate = new Paint(); paint_coordinate.setColor(Color.rgb(207,207,207)); paint_coordinate.setAntiAlias(true); paint_coordinate.setStrokeCap(Paint.Cap.ROUND); paint_coordinate.setStrokeWidth(8); // 画出坐标轴 int widthScreen = MyApp.getScreenWidth(getContext()); int leftX = (int)((COORDINATE_ORIGIN_X-COORDINATE_LENGTH/2)*widthScreen); //x轴左边坐标 int rightX = (int)((COORDINATE_ORIGIN_X+COORDINATE_LENGTH/2)*widthScreen); //x轴右边坐标 int topY = (int)((COORDINATE_ORIGIN_Y-COORDINATE_LENGTH/2)*widthScreen); //y轴上边坐标 int bottomY = (int)((COORDINATE_ORIGIN_Y+COORDINATE_LENGTH/2)*widthScreen); //y轴下边坐标 int centerX = (leftX+rightX)/2; //原点的x坐标 int centerY = (topY+bottomY)/2; //原点的y坐标 int radiusCoordinate = (rightX-leftX)/2; //轴的长度 canvas.drawLine(leftX,centerY,rightX,centerY,paint_coordinate); //画出x轴 canvas.drawLine(centerX,topY,centerX, bottomY, paint_coordinate); //画出x轴 //画圆 Paint paint_circle = new Paint(); paint_circle.setColor(Color.rgb(207,207,207)); paint_circle.setAntiAlias(true); paint_circle.setStyle(Paint.Style.STROKE); //设置为描边,即只画边缘,不然的话就画出实心的圆 paint_circle.setStrokeCap(Paint.Cap.ROUND); paint_circle.setStrokeWidth(4); canvas.drawCircle(centerX,centerY,((float)Math.sqrt((double)2)/3)*radiusCoordinate,paint_circle); canvas.drawCircle(centerX,centerY,((float)Math.sqrt((double)8)/3)*radiusCoordinate,paint_circle); //画圆弧 // Paint paint_circle = new Paint(); // paint_circle.setColor(Color.rgb(207,207,207)); // paint_circle.setAntiAlias(true); // paint_circle.setStyle(Paint.Style.STROKE); //设置为描边,即只画边缘,不然的话就画出实心的圆 // paint_circle.setStrokeCap(Paint.Cap.ROUND); // paint_circle.setStrokeWidth(4); // RectF oval = new RectF(centerX-((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerY-((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerX+((float)Math.sqrt((double)2)/3)*radiusCoordinate, centerY+((float)Math.sqrt((double)2)/3)*radiusCoordinate); //第四个boolean参数表示要不要连接原点,具体效果与paint_circle.setStyle(Paint.Style.STROKE)相关联。 //第二个参数是从哪个角度开始画,第三个参数是顺时针扫多少角度 // canvas.drawArc(oval,0,360,false,paint_circle); //画出八个关键点 Paint paint_mood_point = new Paint(); paint_mood_point.setAntiAlias(true); paint_mood_point.setStrokeCap(Paint.Cap.ROUND); paint_mood_point.setStrokeWidth(10); paint_mood_point.setColor(Color.BLUE); //八个心情点的位置 float[][] arr_mood_point = new float[][]{{2f/3f,2f/3f}, {1f/3f, 1f/3f}, {1f/3f, -1f/3f}, {2f/3f, -2f/3f}, {-2f/3f, -2f/3f}, {-1f/3f, -1f/3f}, {-1f/3f, 1f/3f},{-2f/3f, 2f/3f}}; for(int i = 0;i<8; i++){ canvas.drawPoint((float)centerX+arr_mood_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_mood_point[i][1]*(float)radiusCoordinate,paint_mood_point); } //画出四个轴点 Paint paint_xy_point = new Paint(); paint_xy_point.setAntiAlias(true); paint_xy_point.setStrokeCap(Paint.Cap.ROUND); paint_xy_point.setStrokeWidth(20); paint_xy_point.setColor(Color.rgb(207,207,207)); //四个轴点位置 float[][] arr_xy_point = new float[][]{{1,0}, {-1, 0}, {0, 1}, {0, -1}}; for(int i = 0;i<4; i++){ canvas.drawPoint((float)centerX+arr_xy_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_xy_point[i][1]*(float)radiusCoordinate,paint_xy_point); } //写出相应的字 Paint paint_text = new Paint(); // paint_text.setAntiAlias(true); // paint_text.setStrokeCap(Paint.Cap.ROUND); // paint_text.setStrokeWidth(10); paint_text.setTextSize(30f); paint_text.setColor(Color.BLACK); paint_text.setTextAlign(Paint.Align.CENTER); //八个心情的文字 for(int i = 0;i<8; i++){ canvas.drawText(STR_MOOD[i],(float)centerX+arr_mood_point[i][0]*(float)radiusCoordinate,(float)centerY-arr_mood_point[i][1]*(float)radiusCoordinate,paint_text); } //四个坐标下标的文字 String str_xy[] = {"正能量", "负能量", "高压", "低压"}; //横纵坐标的下标位置 float[][] arr_point2 = new float[][]{{1f+0.13f,0f}, {-1f-0.13f, 0f}, {0f, 1f+0.05f}, {0f, -1f-0.1f}}; for(int i = 0;i<4; i++){ canvas.drawText(str_xy[i],(float)centerX+arr_point2[i][0]*(float)radiusCoordinate,(float)centerY-arr_point2[i][1]*(float)radiusCoordinate,paint_text); } } }