柱形图

1.效果图
这里插入图片描述
2.activity_main 布局
<com.bwei.draw01.MyView android:id="@+id/myView" android:layout_width="wrap_content" android:layout_height="500dp" /> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/text_name" android:text="姓名:" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/edi_text" android:layout_width="100dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/text_score" android:text="成绩:" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/edi_text1" android:layout_width="100dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_add" android:text="添加成绩" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 这里插入代码片
3.自定义myView
public class MyView extends View {

private Paint mLinePaint;
private Paint mRectPaint;
private Paint mTextPaint;
private List<User> list;

public MyView(Context context) {
    super(context);
    init();
}

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

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

private void init() {
    mLinePaint = new Paint();
    mLinePaint.setColor(Color.BLUE);
    mLinePaint.setStyle(Paint.Style.STROKE);
    mLinePaint.setStrokeWidth(2);

    mRectPaint = new Paint();
    mRectPaint.setColor(Color.RED);
    mRectPaint.setStyle(Paint.Style.FILL);

    mTextPaint = new Paint();
    mTextPaint.setColor(Color.BLUE);
    mTextPaint.setStyle(Paint.Style.STROKE);
    mTextPaint.setTextSize(20);
    list = new ArrayList<>();
}
public void addUser(User user){
    list.add(user);
    this.invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawLine(100,500,500,500,mLinePaint);
    canvas.drawLine(100,0,100,500,mLinePaint);

    for (int i = 0; i <=5 ; i++) {
        int a=i*100;
        canvas.drawText(String.valueOf(a),50,500+15-a,mTextPaint);

    }
    /*String[] nameArray=new String[]{"大一","大二","大三","大四"};
    int[] scoreArray=new int[]{200,300,400,500};*/
    for (int i = 0; i <list.size() ; i++) {
         int a=i*100;
         float textWidth=mTextPaint.measureText(list.get(i).getName());
         canvas.drawText(list.get(i).getName(),170-textWidth/2+a,450+100,mTextPaint);
        //画矩形
        Rect rect=new Rect();
        rect.left=100+50+a;
        rect.right=100+100+a;
        rect.bottom=500;
        rect.top=rect.bottom-list.get(i).getScore();
        canvas.drawRect(rect,mRectPaint);

    }
}

}
4.MainActivity 传成绩
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();

}

private void initView() {
    mMyView = findViewById(R.id.myView);
    mTextName = findViewById(R.id.text_name);
    mEdiText = findViewById(R.id.edi_text);
    mTextScore = findViewById(R.id.text_score);
    mEdiText1 = findViewById(R.id.edi_text1);
    mBtnAdd = findViewById(R.id.btn_add);
    mBtnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name = mEdiText.getText().toString().trim();
            int score=Integer.parseInt(mEdiText1.getText().toString());

            User user=new User(name,score);
            Toast.makeText(MainActivity.this,user.toString(),Toast.LENGTH_SHORT).show();
            mMyView.addUser(user);
        }
    });
}

猜你喜欢

转载自blog.csdn.net/weixin_43703093/article/details/84638243