2013-09-24 35 views
0

我正在做一個公牛眼睛的流派,但不是使用圓形,而是使用正方形。從擴展視圖中的活動調用方法

但問題是:

一切都完成後,算法生成的顏色別人方塊完成。

但是我實現了一個按鈕,我讓它刷新了公牛的眼睛。

問題是我不能做,需要幫助。

這是MainActivity,從這裏我將檢測到按鈕點擊。

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FrameLayout frame = (FrameLayout) findViewById(R.id.frame); 

    Draw draw = new Draw(this); 
    frame.addView(draw); 

    Button refresh = (Button) findViewById(R.id.refresh); 

    refresh.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      draw.onDraw(canvas); 
      frame.addView(draw); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
    } 
} 

這是Draw活動,這是我用來渲染圖像的活動。

public class Draw extends View { 

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

Paint prop = new Paint(); 
Random color = new Random(); 

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 

    int width = getWidth(); 
    int height = getHeight(); 

    int oriwidth = 0; 
    int oriheight = 0; 

    for (int x = 0; x < 20; x++) { 
     int red = color.nextInt(); 
     int green = color.nextInt(); 
     int blue = color.nextInt(); 
     prop.setARGB(0, red, green, blue); 
     canvas.drawRect(oriwidth += 10, oriheight += 10, width -= 10, 
       height -= 10, prop); 
    } 
} 
} 

有人可以幫我嗎?對不起英文。

+1

什麼是確切的問題。你提到「問題是我不能做,需要幫助。」它是一個編譯或運行時問題? – prijupaul

+0

我無法調用onDraw方法再次運行。我希望能用新的顏色看到一個新的廣場。 –

回答

2

是否有什麼特別的原因讓你在onCreate中以編程方式添加Draw視圖? 嘗試在佈局xml本身中定義Draw視圖。這應該解決任何與定義視圖的寬度/高度有關的問題(確保定義寬度&高度...首先嚐試100dp的硬編碼尺寸100dp)

一旦你這樣做了,確保捕捉你的 「畫」 視圖作爲活動的一員:

public class MainActivity extends Activity 
{ 
private Draw mDraw; 

然後,在你的onCreate:

mDraw = (Draw)findViewById(R.id.myDrawId); 

然後,在你點擊按鈕監聽器,只需調用無效:

refresh.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      mDraw.invalidate(); 
     } 
    }); 
+0

謝謝你!我只需要有無效的方法。我學到了一些東西!再次感謝! –

+0

很高興幫助:) –

0

嘗試用這個代碼部分改變:

public void onClick(View v) { 
    MainActivity.this.draw.onDraw(canvas); 
    MainActivity.this.frame.addView(draw); 
} 
+0

仍然這樣做... –

0

你不應該直接調用onDraw()。嘗試draw.invalidate()

+0

他告訴我改變draw.onDraw(canvas);和frame.addView(draw);修飾符到最後。當我這樣做。我點擊刷新按鈕,它崩潰。它仍然不起作用。 –

+0

當logcat發生崩潰時,你會得到一個錯誤嗎? – cnnr

+0

http://i.imgur.com/vVdlTE4.png –