布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_height="match_parent"
tools:context=".MainActivity">
<com.qh.***.lmx1607makeview2.MyRectView
android:id="@+id/my_rect_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<EditText
android:id="@+id/txt_name"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="40dp"
android:layout_marginTop="5dp"
android:hint="Name" />
<EditText
android:id="@+id/txt_score"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="150dp"
android:layout_marginTop="5dp"
android:hint="Score" />
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/txt_name"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginEnd="23dp"
android:layout_marginRight="23dp"
android:text="Add" />
</RelativeLayout>
自定义Class
package com.qh.***.lmx1607makeview2;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class MyRectView extends View {
private Paint mLinePaint, mTextPaint, mRectPaint;
private List<User> userList;
public MyRectView(Context context) {
super(context);
init();
}
public MyRectView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public MyRectView(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);
mTextPaint = new Paint();
mTextPaint.setColor(Color.BLUE);
mTextPaint.setStyle(Paint.Style.STROKE);
mTextPaint.setTextSize(25);
mRectPaint = new Paint();
mRectPaint.setColor(Color.RED);
mRectPaint.setStyle(Paint.Style.FILL);
userList = new ArrayList<>();
}
//注意方法的修饰符public
public void addUser(User user) {
userList.add(user);
this.invalidate();
}
//绘制图形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//绘制线条
//x轴
canvas.drawLine(100, 800, 800, 800, mLinePaint);
//y轴
canvas.drawLine(100, 800, 100, 100, mLinePaint);
//添加y轴数字
for (int i = 0; i < 8; i++) {
int a = i * 100;
canvas.drawText(String.valueOf(a), 100 - 50, 800 + 25 - a, mTextPaint);
}
//添加X轴的姓名
// String[] nameArray = new String[]{"秦琦", "姝婳", "伯通"};
//分数
// int[] scoreArray = new int[]{300, 600, 500};
for (int i = 0; i < userList.size(); i++) {
//设置名称之间的间隔为 200
int a = i * 200;
float textWidth = mTextPaint.measureText(userList.get(i).getName());
canvas.drawText(userList.get(i).getName(), 200 - textWidth + a + 25, 800 + 50, mTextPaint);
//添加条形图 矩形
Rect rect = new Rect();
//间距是a
rect.left = 200 - 25 + a;
rect.right = 200 + 25 + a;
//矩形的底部,坐标不能改变
rect.bottom = 800;
rect.top = rect.bottom - userList.get(i).getScore();
canvas.drawRect(rect, mRectPaint);
}
}
}
MainActivity
package com.qh.***.lmx1607makeview2;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/**
* Name
*/
private EditText mTxtName;
/**
* Score
*/
private EditText mTxtScore;
/**
* Add
*/
private Button mBtnAdd;
private MyRectView mMyRectView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mTxtName = findViewById(R.id.txt_name);
mTxtScore = findViewById(R.id.txt_score);
mBtnAdd = findViewById(R.id.btn_add);
//以findViewById的形式找到MyRectView
mMyRectView = findViewById(R.id.my_rect_view);
mBtnAdd.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add:
String name = mTxtName.getText().toString();
String score = mTxtScore.getText().toString();
User user = new User(name, Integer.parseInt(score));
mMyRectView.addUser(user);
break;
}
}
}
自定义User类
package com.qh.***.lmx1607makeview2;
public class User {
private String name;
private int score;
public User(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
效果图