2011-11-22 68 views
0

我有一個簡單的程序,可以通過畫布繪製簡單的形狀。android:隨機選擇屬性的方法

private class MyViewCircle extends View { 

    public MyViewCircle(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setColor(Color.RED); 
     canvas.drawCircle(89, 150, 30, paint); 
    } 

} 

正如你看到的,圓的屬性是

(Color.RED); 
(89, 150, 30, paint); 

我想創建另一個類包括了很多其他功能(顏色和座標),並選擇他們隨機。 那麼,哪種方式更好,陣列或陣列列表還是別的?有人能給我一個例子怎麼做?那麼如何隨機挑選它們並將它們放入繪圖函數?乾杯!

回答

0

嘗試創建一個簡單的Java對象包含所有的屬性,然後將它們添加到一個列表,然後選擇一個項目隨意:

class MyAttributes { 
    int color; 
    int x, y; 
    int radius; 

    public MyAttributes(int color, int x, int y, int radius) { 
     this.color = color; 
     this.x = x; 
     this.y = y; 
     this.radius = radius; 
    } 
} 

在您的視圖類:

private List<MyAttributes> mAttributes; 
private Random mRandom; 

public MyViewCircle(Context context) { 
    mRandom = new Random(); 
    mAttributes = new ArrayList<MyAttributes>(); 

    mAttributes.add(new MyAttributes(Color.RED, 80, 70, 199)); 
    mAttributes.add(new MyAttributes(Color.BLUE, 50, 170, 88)); 
} 


@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 

    int randomPosition = mRandom.nextInt(mAttributes.size()); 
    MyAttributes randomAttr = mAttributes.get(randomPosition); 

    paint.setColor(randomAttr.color); 
    canvas.drawCircle(randomAttr.x, randomAttr.y, randomAttr.radius, paint); 
} 
+0

小優化到你的代碼;不要在「mRandom.nextInt(mAttributes.size());」中調用「.size()」;「在每次調用時,一旦添加了所有屬性,就會存儲該大小。 – C0deAttack

+0

輝煌,我會試試! – nich

0

通常在Android上,我始終致力於使用Array來表現性能。

要隨機選擇,可以使用Math.random()方法或util.Random對象。使用其中的任何一個可以生成索引值,並使用該索引從數組中讀取數據。

應該很簡單,所以我不會寫任何代碼,除非你真的需要這樣。