View画矩形统计图(可动态添加)

布局






    

    

    

画矩形统计图

public class MyView extends View {
private Paint mLinePaint, mTextPaint, mRectPaint;
ArrayList list;
public MyView(Context context) {
    super(context);
    init();
}


public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}



//长宽 测量控件的大小,确定宽高
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

//测量控件的位置,确定上下左右坐标
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
}

private void init() {
    mLinePaint = new Paint();
    //颜色
    mLinePaint.setColor(Color.GREEN);
    //样式
    mLinePaint.setStyle(Paint.Style.STROKE);
    //宽度
    mLinePaint.setStrokeWidth(5);

    //矩形样式
    mRectPaint = new Paint();
    mRectPaint.setColor(Color.BLUE);
    mRectPaint.setStyle(Paint.Style.FILL);

    mTextPaint = new Paint();
    //字体颜色
    mTextPaint.setColor(Color.BLACK);
    mTextPaint.setStyle(Paint.Style.STROKE);
    //字体大小
    mTextPaint.setTextSize(50);


    //添加数据
    list = new ArrayList<>();
    list.add(new User("啊哈",200));
}

public void addUser(User user) {
    list.add(user);//添加数据

    this.invalidate();//刷新View
}
//绘图,画点线矩形圆形的
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    /*
     * X轴从200,1000开始到1000,1000结束
     *
     * */
    canvas.drawLine(200, 1000, 1000, 1000, mLinePaint);

    /*
     * Y轴从200,200开始到200,1000结束
     *
     * */
    canvas.drawLine(200, 200, 200, 1000, mLinePaint);

    for (int i = 0; i <= 8; i++) {
        int a = i * 100;//Y轴上的数字
        /*
         * 1000+25-a
         * a=i*100
         *
         * 第i个数字到手机顶部的距离
         *
         * mTextPaint数字的样式
         *
         * */
        canvas.drawText(String.valueOf(a), 100 - 50, 1000 + 25 - a, mTextPaint);

        //     canvas.drawText(i+"",100-50,1000+25-i,mTextPaint);//一般使用String.valueof()
    }

    for (int i = 0; i < list.size(); i++) {

        int j = i * 200;//字体间距
        //字段宽度
        float text = mTextPaint.measureText(list.get(i).name);

        canvas.drawText(list.get(i).name, 300 - text / 2 + j, 1000 + 100, mTextPaint);

        //画矩形
        Rect rect = new Rect();
        rect.left = 300 - 50 + j;//左间距
        rect.right = 300 + 50 + j;//右间距
        rect.bottom = 1000;//矩形的底部坐标,不能变
        rect.top = rect.bottom-list.get(i).score;//到顶部的距离
        canvas.drawRect(rect,mRectPaint);
    }

}
}

动态添加

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

EditText nameString;
EditText num;
Button button;
MyView myView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //寻找控件
    initView();
    //点击事件
    button.setOnClickListener(this);
}

private void initView() {
    myView = findViewById(R.id.myView);
    nameString = findViewById(R.id.nameString);
    num = findViewById(R.id.num);
    button = findViewById(R.id.button);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button:
            //获取输入框中的值
            String name = nameString.getText().toString().trim();
            String shu = num.getText().toString().trim();
            //转成int类型
            int num = Integer.parseInt(shu);

            myView.addUser(new User(name, num));

            break;
    }
}

}
View画矩形统计图(可动态添加)_第1张图片

你可能感兴趣的:(进阶)