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

设置 mTab​​les。

好的,所以,这是 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 顶部和底部都一样。