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);
}
});
}