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

布局

<?xml version="1.0" encoding="utf-8"?>
<android.widget.LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/nameString"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:layout_weight="1"
        android:background="@drawable/sty_color"
        android:hint="姓名" />

    <EditText
        android:id="@+id/num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_margin="10dp"
        android:background="@drawable/sty_color"
        android:hint="成绩"
        app:layout_constraintLeft_toRightOf="@+id/nameString" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_margin="10dp"
        android:background="@drawable/btn_color"
        android:text="添加" />
</LinearLayout>

<zhao.com.demo1.MyView
    android:id="@+id/myView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
</android.widget.LinearLayout>

画矩形统计图

public class MyView extends View {
private Paint mLinePaint, mTextPaint, mRectPaint;
ArrayList<User> 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;
    }
}

}
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值