2015-06-11 80 views
0

因此,iv创建了扩展视图的类。这里是我的代码:onDraw()方法不能正常工作

@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个需要绘制的对象。第一个对象总是被绘制,但第二个对象不是。当我的第二个对象坐标是left和top == left和top时,它不显示,当对象绘制在绘制的对象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); 
} 

settin mTab​​les。

行,所以,这是setTables()方法:

public void setTables(List<Table> tables) { 
    mTablesList = tables; 
    mPaint.setColor(getResources().getColor(android.R.color.black)); 
    invalidate(); 
} 

后,它callse 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); 

} 
+0

带上一个代码,你正在填写mTablesList – AterLux

+0

它是在里面的活动,从那里调用setTables()方法 –

+0

好的。现在,里面有什么“setTables()”?如果您从创建过程中获得“表格”的完整生命周期,那就更好了。 – AterLux

回答

0

您没有设置正确的坐标。 table.setLeft(20)是对象左边距到左边的值,table.setRight(30)是从对象左边到右边。所以,allways table.setRight> table.SetLeft同样适用于顶部和底部。