2016-08-31 65 views
0

我會非常感激的是有人可以提供幫助。android:如何從另一個自定義類的畫布上繪製視圖?

我在我的xml文件中用TableLayout創建了一個網格視圖。 在相應的java文件中,我檢索數組視圖中所有視圖的標識。 我有另一個類在其構造函數中接收對上面創建的視圖的引用,以便在其畫布上繪製。

public class Mosaique extends Activity { 

Box [][]box = new Box[NL][NC]; 

View [][] boxMosaique = new View[NL][NC]; 
//... 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.mosaique); 

    boxMosaique[0][0] = findViewById(R.id.b_00); 
    boxMosaique[0][1] = findViewById(R.id.b_01); 
    boxMosaique[0][2] = findViewById(R.id.b_02); 
//… 
for (int lig=0;lig<NL;lig++) 
     for(int col=0;col<NC;col++) 
      box[lig][col] = new Box(boxMosaique[lig][col], bckgrnd_color, lig,col); 
} 
//... 
} 
// The constructor of the another class which access the views for drawing 

public Box(View aView, int backGroundColor, int lig, int col){ 

    this.aView = aView; 
    this.lig = lig; 
    this.col = col; 
    this.backGroundColor = backGroundColor; 
// How to access the canvas of aView for drawing ? 
} 

回答

0

我會推薦將Box類作爲View來編寫。

Box extends View{ 
float lig; 
float col; 
Clolr backGroundColor; 

... 

@Override 
protected void onDraw(Canvas canvas) { 
//draw here on canvas 
... 
} 

public drawBox(int backGroundColor, int lig, int col){ 

    this.aView = aView; 
    this.lig = lig; 
    this.col = col; 
    this.backGroundColor = backGroundColor; 
    invalidate() 
} 

不是添加構造函數,而是添加一個方法來設置盒子值並在設置值後調用invalidate()。

+0

Thaks Mr Rao。那麼我怎樣才能使用findViewById(...)從函數protected void onCreate(Bundle savedInstanceState)調用Box對象的構造函數? – Bocar

+0

Box boxView = findviewById(..); boxview.drawBox(...);這會在內部調用invalldate() - 它基本上會重繪視圖。 –

相關問題