2012-06-26 357 views
0

所以即時通訊設法使一個adroid應用程序繪製圓形流作爲touchevent發生。如果我在屏幕的左側繪製,它應該畫一個綠色的圓圈,如果它在右側,它應該繪製一個藍色的圓圈。該應用程序正在這樣做,但它會更改已繪製的所有圓圈的顏色。所以我做了一個Draw circle類和一個對象數組列表,將每個cricle作爲一個單獨的對象來處理,即使在一個Touchup事件之後,仍然無法工作。它的代碼如下改變顏色的顏色改變所有圓形顏色

private class Drawcirlce { 

     public Drawcirlce(Canvas c) { 
     // TODO Auto-generated constructor stub 


     for (Point point : points) { 

      if(flag==true) 
        c.drawCircle(point.x, point.y, 5, paint); 
        else 
        c.drawCircle(point.x, point.y, 5, p2); 
     } 
    invalidate(); 
    } 
    /*for (Point point : points) { 
    if(flag==true) 
     mcan.drawCircle(point.x, point.y, 5, paint); 
     else 
     mcan.drawCircle(point.x, point.y, 5, p2); 
}*/ 

} 


public void onDraw(Canvas canvas) { 


    i++; 
    //Drawcirlce d=new Drawcirlce(); 
dc.add(new Drawcirlce(canvas)); 

Log.d(TAG, "i: " + i);invalidate(); 
} 
public boolean onTouch(View view, MotionEvent event) { 
    // if(event.getAction() != MotionEvent.ACTION_DOWN) 
    // return super.onTouchEvent(event); 
    Point point = new Point(); 
    point.x = event.getX(); 
    point.y = event.getY(); 
    if(point.x>200){ 
     paint.setColor(Color.BLUE); 
    flag=true; 
    } 
    else{ 
     p2.setColor(Color.GREEN); 
    flag=false; 
    } 

    points.add(point); 
    //dc.add(new Drawcirlce(mcan)); 

    invalidate(); 
    Log.d(TAG, "point: " + point); 
    return true; 
} 

public boolean onTouch(View view, MotionEvent event) { 
    // if(event.getAction() != MotionEvent.ACTION_DOWN) 
    // return super.onTouchEvent(event); 
    Point point = new Point(); 
    point.x = event.getX(); 
    point.y = event.getY(); 
    if(point.x>200){ 
     paint.setColor(Color.BLUE); 
    flag=true; 
    } 
    else{ 
     p2.setColor(Color.GREEN); 
    flag=false; 
    } 

    points.add(point); 
    //dc.add(new Drawcirlce(mcan)); 

    invalidate(); 
    Log.d(TAG, "point: " + point); 
    return true; 
} 

任何一個知道aht即時通訊做錯了,或者如果有一種方法解決這個問題?

+0

你有共享不完整的代碼,因此很難理解你的問題。我最好的猜測是你搞砸了國旗變量 – the100rabh

回答

2

您的Drawcirlce類需要有一個Paint對象。 (你可以把它公諸於衆,或者給它getPaint()setPaint(),取其一)。然後,當你打電話給c.drawCircle(point.x, point.y, 5, paint);時,改爲用類中的Paint對象調用它。

事情是這樣的:

private class Drawcirlce { 
    public Paint myPaint; 

    public void draw(Canvas c) { // Don't use a constructor here... 
     if (myPaint == null) 
      return; 

     for (Point point : points) { 
      c.drawCircle(point.x, point.y, 5, myPaint); 
      invalidate(); 
     } 
    } 
} 

然後,在你onTouch事件,你做這樣的事情:

Drawcirlce myCircle = new Drawcirlce(); 
if (flag == true) 
    myCircle.myPaint = new Paint(paint); // Copies the current paint object. 
else 
    myCircle.myPaint = new Paint(p2); // Copies the current p2 object. 
dc.add(); // Adds our circle with its own Paint object. 

最後,你必須改變你的onDraw事件。

for (Drawcirlce d : dc) { // Loop through everything in the dc array. 
    d.draw(canvas); // Draw it to this canvas! 
} 

此代碼,實際上,分配一個圈擁有自己的Paint對象的能力。然後,當觸摸時,您創建一個Paint給它。最後,在繪圖時,您使用Paint而不是當前的。

+0

嘿,謝謝你的回覆,但它似乎沒有做任何事情。認爲它畫在錯誤的畫布上=/ – user1472707

+0

看起來,類中的MyPaint始終爲空=/ – user1472707

+0

好吧,它的繪畫,但仍然在做同樣的事情 – user1472707