• 画布Canvas 画笔Paint


    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);
            }
        }
    }
  • 相关阅读:
    调用其他类函数,且其他类函数使用自己脚本的成员变量的方法
    伟程君解决端口被占用问题(接口jmeter 本地端口被占用完了,jmeter报错的问题)(亲测是可以的)
    JMeter 使用 http长连接的方法
    解决端口被占用问题(端口timewait)
    光辉岁月吉他指弹
    Jmeter获取 json字符的另外一种写法
    Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)
    wrk一个能做模拟高并发请求的东东
    017-mac下project
    016-mac下ps
  • 原文地址:https://www.cnblogs.com/zhaozilongcjiajia/p/10767981.html
Copyright © 2020-2023  润新知