2013-06-05 66 views
0

我是編程新手,主要是自學和使用書籍,有很多其他人在本論壇中提出的問題。 我目前正在通過安卓遊戲開發傻瓜工作,並遇到幾個問題,其中大部分我已經能夠解決自己的問題,但是這個編譯器錯誤讓我無法離開。它'不能識別代碼中的canvas.drawCircle。我無法弄清楚爲什麼。任何幫助或想法非常感謝。 在此先感謝 湯姆繪製到安卓動畫事件上的畫布

public class CrazyEightsView extends View { 

    private Paint redPaint; 
    private int circleX; 
    private int circleY; 
    private float radius; 

    public CrazyEightsView(Context context) { 
     super(context) ; 
     redPaint = new Paint(); 
     redPaint.setAntiAlias(true); 
     redPaint.setColor(Color.rgb(99, 00, 00)); 
     circleX=100; 
     circleY=100; 
     radius=30;  
    } 

    @Override 
    public void onDraw (Canvas canvas) { 

    } 


    public boolean onTouchEvent (MotionEvent event) { 
     int eventaction = event.getAction(); 
     int X =(int)event.getX(); 
     int Y =(int)event.getY(); 

     switch (eventaction){ 
      case MotionEvent.ACTION_DOWN: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       break; 
      case MotionEvent.ACTION_UP: 
       circleX = X; 
       circleY = Y; 
       break; 

       invalidate(); 
       return true; 
     } 

     canvas.drawCircle (circleX, circleY, radius, redPaint); 
    } 
} 
+0

在平局內移動方法 canvas.drawCircle(circleX,circleY,radius,redPaint); invalidate()將刷新繪製。 – Raghunandan

回答

0

由於Raghunandan最高審計機關,不要試圖以非onDraw()其他任何方法來繪製。將您的XY值設置爲onTouch(),然後使視圖無效。這將再次調用onDraw()

+0

感謝有類似問題的任何人,這是我的代碼現在看起來像\t @Override public void onDraw(Canvas canvas){canvas.drawCircle(circleX,circleY,radius,redPaint); invalidate();公共布爾onTouchEvent(MotionEvent事件){ \t \t \t int eventaction = event.getAction(); \t \t \t int X =(int)event.getX(); \t \t \t int Y =(int)event.getY(); \t \t開關(eventaction){ \t \t \t情況MotionEvent.ACTION_DOWN: \t \t \t \t中斷; \t \t \t情況下MotionEvent.ACTION_MOVE: \t \t \t \t休息; \t \t \t case MotionEvent。ACTION_UP: \t \t \t \t circleX = X; \t \t \t \t circleY = Y; \t \t \t \t break; \t \t \t \t默認: \t \t \t} \t \t \t迴歸真實; – user2385859

0

移動該拉伸方法

 canvas.drawCircle (circleX, circleY, radius, redPaint); 

內要強制的圖繪製,呼叫無效()。

http://developer.android.com/reference/android/view/View.html#invalidate()

無效()將刷新平局(調用的onDraw(畫布)。

http://developer.android.com/reference/android/graphics/Canvas.html

下面根據自己的需要修改。

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    CrazyEightsView ev= new CrazyEightsView(this); 

    setContentView(ev); 
} 

public class CrazyEightsView extends View { 

    private Paint redPaint; 
    private int circleX; 
    private int circleY; 
    private float radius; 

    public CrazyEightsView(Context context) { 
     super(context) ; 
     redPaint = new Paint(); 
     redPaint.setAntiAlias(true); 
     redPaint.setColor(Color.rgb(99, 00, 00)); 
     circleX=100; 
     circleY=100; 
     radius=30; 

    } 
    @Override 

    public void onDraw (Canvas canvas) { 
        // draw your circle on the canvas 
     canvas.drawCircle (circleX, circleY, radius, redPaint); 
    } 

    public boolean onTouchEvent (MotionEvent event) { 
      int eventaction = event.getAction(); 
      int X =(int)event.getX(); 
      int Y =(int)event.getY(); 

      switch (eventaction){ 
      case MotionEvent.ACTION_DOWN: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       break; 
      case MotionEvent.ACTION_UP: 
       circleX = X; 
       circleY = Y; 
       invalidate();// call invalidate to refresh the draw 
       break; 

      } 
      return true; 
    } 
    } 

} 

enter image description here