2016-04-21 68 views
-1

我对Android开发非常陌生(如昨天开始)!我正在尝试制作一个应用程序,可以绘制一个圈并移动它。我遇到了一个问题,因为使用当前代码的触摸事件导致它崩溃。下面的代码:使用Android的画布绘图

/** 
* capture touch events and draw or erase circles accordingly 
*/ 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int x = (int)event.getX(); 
    int y = (int)event.getY(); // get x and y coords 
    int xysquared = (int)(Math.pow((x-getWidth()/2),2) + Math.pow(y-getHeight()/2,2)); 
    int xyroot = (int)(Math.pow(xysquared, 0.5)); // calculate the euclidean distance from the coordinate to the circle center 
    int innerCircleRadius = Math.min(getHeight(),getWidth())/4; 
    int outerCircleRadius = Math.min(getHeight(),getWidth())/3; 
    switch(event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      if(xyroot >= innerCircleRadius && xyroot <= outerCircleRadius) { 
       drawCircles(x,y); 
      } 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if(xyroot >= innerCircleRadius && xyroot <= outerCircleRadius) { 
       drawCircles(x,y); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      if(xyroot >= innerCircleRadius && xyroot<= outerCircleRadius) { 

      } 


    } 
    return true; 

} 

/** 
* draw the circle at given position w/ correct radius 
* @param x xcoord of circle center 
* @param y ycoord of circle center 
*/ 
public void drawCircles(int x,int y) { 
    int radius; 
    int getDiffSquared = (int)(Math.pow((getHeight()/2-getHeight()/3),2) + Math.pow((getWidth()/2-getWidth()/3), 2)); 
    radius = (int)Math.pow(getDiffSquared, 0.5)/2; 
    Path circle = new Path(); 
    Paint circlePaint = new Paint(); 
    circlePaint.setColor(getResources().getColor(R.color.black)); 
    circle.addCircle(x, y, radius, Direction.CW); 
    mCanvas.drawPath(circle,circlePaint); 
} 
+1

http://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug-my-application-错误 –

+0

发布您的logcat – Ameer

+0

我无法找到堆栈跟踪,因为当我在手机上运行应用程序时它崩溃了,所以没有为错误输出文本。 – LKK

回答