onDraw() 方法不能正常工作
onDraw() method doesnt work right
因此,iv 创建了扩展视图的 class。这是我的代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!mTablesList.isEmpty()) {
drawTables(canvas);
}
}
private void drawTables(Canvas canvas) {
for (Table table : mTablesList) {
canvas.drawRect(mWidht * table.getLeft() / 100, mHeight * table.getTop() / 100, mWidht * table.getRight() / 100, mHeight * table.getBottom() / 100, m1Paint);
saveInfo(table, mWidht * table.getLeft() / 100, mHeight * table.getTop() / 100, mWidht * table.getRight() / 100, mHeight * table.getBottom() / 100);
}
}
private void saveInfo(Table table, int left, int top, int right, int bottom) {
Rect rect = new Rect();
rect.set(left, top, right, bottom);
table.setRect(rect);
mTablesListTouch.add(table);
}
现在,我有 2 个对象需要绘制。第一个对象总是被绘制,但第二个对象不被绘制。当我的第二个对象坐标为左和顶部 == 左侧和顶部时,它不显示,当对象绘制在绘制的对象 1 下方时,它显示。有人可以给我一个解决方案吗?
private void makeTables() {
Table table = new Table();
table.setLeft(20);
table.setTop(7);
table.setRight(40);
table.setBottom(20);
table.setAvailable(true);
table.setID(1);
listOfTables.add(table);
Table table1 = new Table();
table1.setLeft(20);
table1.setTop(70);
table1.setRight(60);
table1.setBottom(20);
table1.setAvailable(true);
table1.setID(2);
listOfTables.add(table1);
mTables.setTables(listOfTables);
}
设置 mTables。
好的,所以,这是 setTables() 方法:
public void setTables(List<Table> tables) {
mTablesList = tables;
mPaint.setColor(getResources().getColor(android.R.color.black));
invalidate();
}
之后调用 onMeasure() 和 onDraw()
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
final int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
mWidht = width;
mHeight = height;
setMeasuredDimension(mWidht, mHeight);
}
你没有设置正确的坐标。 table.setLeft(20)是从左边距到对象左侧的值,table.setRight(30)是从左边距到对象右侧的值。所以,总是 table.setRight> table.SetLeft 顶部和底部都一样。
因此,iv 创建了扩展视图的 class。这是我的代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (!mTablesList.isEmpty()) {
drawTables(canvas);
}
}
private void drawTables(Canvas canvas) {
for (Table table : mTablesList) {
canvas.drawRect(mWidht * table.getLeft() / 100, mHeight * table.getTop() / 100, mWidht * table.getRight() / 100, mHeight * table.getBottom() / 100, m1Paint);
saveInfo(table, mWidht * table.getLeft() / 100, mHeight * table.getTop() / 100, mWidht * table.getRight() / 100, mHeight * table.getBottom() / 100);
}
}
private void saveInfo(Table table, int left, int top, int right, int bottom) {
Rect rect = new Rect();
rect.set(left, top, right, bottom);
table.setRect(rect);
mTablesListTouch.add(table);
}
现在,我有 2 个对象需要绘制。第一个对象总是被绘制,但第二个对象不被绘制。当我的第二个对象坐标为左和顶部 == 左侧和顶部时,它不显示,当对象绘制在绘制的对象 1 下方时,它显示。有人可以给我一个解决方案吗?
private void makeTables() {
Table table = new Table();
table.setLeft(20);
table.setTop(7);
table.setRight(40);
table.setBottom(20);
table.setAvailable(true);
table.setID(1);
listOfTables.add(table);
Table table1 = new Table();
table1.setLeft(20);
table1.setTop(70);
table1.setRight(60);
table1.setBottom(20);
table1.setAvailable(true);
table1.setID(2);
listOfTables.add(table1);
mTables.setTables(listOfTables);
}
设置 mTables。
好的,所以,这是 setTables() 方法:
public void setTables(List<Table> tables) {
mTablesList = tables;
mPaint.setColor(getResources().getColor(android.R.color.black));
invalidate();
}
之后调用 onMeasure() 和 onDraw()
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
final int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
mWidht = width;
mHeight = height;
setMeasuredDimension(mWidht, mHeight);
}
你没有设置正确的坐标。 table.setLeft(20)是从左边距到对象左侧的值,table.setRight(30)是从左边距到对象右侧的值。所以,总是 table.setRight> table.SetLeft 顶部和底部都一样。