Android开发:如何根据用户输入数值用for循环绘制多个矩形
Android 输入数字动态绘制对应数量矩形实现方案
整体实现逻辑
- 采用「输入框交互 + 自定义View绘制」的分离架构:先完成用户输入值的合法性校验,再把校验后的有效数值传递给自定义View,通过for循环完成对应数量的矩形绘制
- 所有绘制位置计算、画笔初始化逻辑都放在自定义View内部处理,避免在Activity层堆叠耦合的绘制代码
分步实现流程
- 布局搭建
页面布局依次放置接收数字输入的EditText、触发绘制的Button,以及自定义矩形绘制View,给各个控件设置好基础ID方便后续绑定 - 自定义View编写
在自定义View的构造方法中提前初始化绘制用的Paint实例,设置好画笔颜色、填充样式;对外暴露updateRectCount(int count)方法,方法内部给成员变量赋值需要绘制的矩形总数量,同时调用invalidate()触发View重绘
在onDraw方法中完成核心绘制逻辑:// 自定义View onDraw 内的核心绘制片段 private int targetDrawCount = 0; private Paint rectPaint; private static final int RECT_WIDTH = 100; private static final int RECT_HEIGHT = 150; private static final int RECT_SPACING = 40; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int startOffsetX = 40; // 第一个矩形距离View左侧的内边距 for (int i = 0; i < targetDrawCount; i++) { // 计算每个矩形的左上角、右下角坐标 float left = startOffsetX + i * (RECT_WIDTH + RECT_SPACING); float top = 50; float right = left + RECT_WIDTH; float bottom = top + RECT_HEIGHT; canvas.drawRect(left, top, right, bottom, rectPaint); } } - 交互逻辑对接
给触发按钮设置点击监听,处理用户输入的内容:- 先判断输入框内容是否为空,空值直接弹Toast提示用户输入有效整数
- 一定要用try-catch包裹字符串转整型的逻辑,兜住
NumberFormatException——很多人写这个功能的时候漏了这步,遇到用户输入字母、特殊符号时会直接闪退 - 对转换得到的数值做范围限制,比如根据屏幕宽度计算单屏最多能横向排列多少个矩形,超过的话直接截断为允许的最大值,避免矩形直接跑到屏幕外无法显示
- 数值校验通过后,直接调用自定义View的
updateRectCount()方法传入数值,即可完成对应数量矩形的绘制
实操注意事项
- 不要在
onDraw方法内创建Paint、Rect这类实例对象,频繁触发的GC会导致页面绘制卡顿 - 自定义View里写死的像素值最好结合屏幕密度做转换,避免不同分辨率设备上的矩形尺寸、间距显示偏差过大
内容的提问来源于stack exchange,提问作者thushar
相关产品推荐
相关产品推荐

