I guess you inadvertently divided it by 2?
On Saturday, February 23, 2013 3:10:06 PM UTC-6, Numair Qadir wrote: > > Wow.. Thank you .. Very detailed and helpful answer.. Helped me a lot.. > The problem was the calculation of radius from the points.. Thanks again :) > > > On Fri, Feb 22, 2013 at 8:42 PM, Nobu Games <[email protected]<javascript:> > > wrote: > >> Alright, let's try to help you again. First of all your problem is as >> follows: >> >> 1. On first touch (ACTION_DOWN) you determine the center point "C" of >> the circle. >> 2. While moving the finger you determine the radius of the circle by >> measuring the distance from the center point C to the current move >> coordinate "M". >> 3. On ACTION_UP the drawn circle gets "permanently" drawn to the drawing >> surface >> >> You already solved number 1. Center point C gets stored in downx and >> downy. >> >> Number two isn't that complicated either. First of all get rid of your >> "axis" Collection objects. You can calculate the circle's radius right >> there by measuring the distance from (downx;downy) to your current touch >> event point. By the way you can use the existing Android framework method >> PointF.length(float, >> float)<http://developer.android.com/reference/android/graphics/PointF.html#length%28float,%20float%29>for >> that. >> >> Now to the tricky part and I believe that is where your actual problem >> stems from. The difficulty is having both a "live" update of the circle >> while resizing it and displaying all previously drawn circles at the same >> time. >> >> I assume you created your own custom view with an overridden >> onDraw(Canvas)<http://developer.android.com/reference/android/view/View.html#onDraw%28android.graphics.Canvas%29>method. >> That onDraw method is meant for drawing the current state of the >> view. So on each update you start with a completely blank canvas and you >> have to re-create all previously drawn circles and the one you are >> currently drawing using touch input. >> >> In order to get that right you have to do the following: >> >> - let your onTouch event handler method invalidate the drawing view. >> - let your drawing view's onDraw method draw all previously rendered >> circles >> - let your drawing view's onDraw method render the currently drawn >> circle as follows: >> >> float radius = Math.sqrt(Math.pow(downx - movex, 2) + Math.pow(downy - >>> movey, 2)); >>> canvas.drawCircle(downx, downy, radius, paint); >>> >> >> >> For re-creating the previously drawn circles you have two options: >> >> In your ACTION_UP case block you can... >> >> 1. ...store all circle center points and their radiuses in a list >> data structure. In onDraw you need to iterate that list and re-draw each >> circle >> 2. ...render that circle in a separate Bitmap object that contains >> all already drawn circles. >> >> Option number 2 is much more efficient because if you would implement >> number 1: the more you draw the more work for your view's onDraw method on >> each rendering update. >> >> You can implement option number 2 by creating a Bitmap of the size of >> your drawing view. Then you need to create a Canvas object for that bitmap: >> >> drawnCirclesBitmap = Bitmap.createBitmap(drawingView.getWidth(), >>> drawingView.getHeight(), Bitmap.Config.ARGB_8888); >>> drawnCirclesCanvas = new Canvas(drawnCirclesBitmap); >> >> >> use the drawnCirclesCanvas for drawing your finished circles in the >> ACTION_UP case block. Then you need to change your drawing view's onDraw >> method a bit. It has to draw the bitmap "drawnCirclesBitmap" at the >> position (0;0): >> >> protected void onDraw(Canvas canvas) { >>> canvas.drawBitmap(drawnCirclesBitmap, 0, 0, null); >>> canvas.drawCircle(downx, downy, radius, paint); >>> } >>> >> >> >> On Friday, February 22, 2013 3:20:59 AM UTC-6, Numair Qadir wrote: >>> >>> Hi! Greetings! >>> I'm working in onTouch method to draw a circle, what i'm trying is to >>> draw a circle when user draws on the screen, without using any fixed >>> radius. Radius should calculate from the distance. I've tried but it is not >>> drawing what i want. Here is my code >>> >>> @Override >>> public boolean onTouch(View bg, MotionEvent event) { >>> // TODO Auto-generated method stub >>> dumpEvent(event); >>> >>> final int action = event.getAction(); >>> switch (action & MotionEventCompat.ACTION_MASK) { >>> case MotionEvent.ACTION_DOWN: >>> downx = event.getX(); >>> downy = event.getY(); >>> xaxis.clear(); >>> yaxis.clear(); >>> Log.d(TAG, "DOWN"); >>> break; >>> >>> case MotionEvent.ACTION_MOVE: >>> //drawCircle(event); >>> for (int i = 0; i < event.getPointerCount(); i++) { >>> xaxis.add(Integer.valueOf((**int) event.getX(i))); >>> yaxis.add(Integer.valueOf((**int) event.getY(i))); >>> } >>> // Collections.sort(xaxis); >>> // Collections.sort(yaxis); >>> Log.d(TAG, "DRAG"); >>> return true; >>> >>> case MotionEvent.ACTION_UP: >>> upx = event.getX(); >>> upy = event.getY(); >>> >>> if (xaxis.size()==0 && yaxis.size()==0){ >>> Log.d(TAG, "Arraylist is empty"); >>> } >>> else { >>> minx = xaxis.get(0); >>> miny = yaxis.get(0); >>> for (int i = 0; i < xaxis.size(); i++){ >>> maxx = xaxis.get(i); >>> } >>> for (int j = 0; j < yaxis.size(); j++) { >>> maxy = yaxis.get(j); >>> } >>> double temp = Math.pow((maxx - minx), 2) >>> + Math.pow((maxy - miny), 2); >>> float radius = (float) Math.sqrt(temp) / 2; >>> canvas.drawCircle(minx, miny, radius, paint); >>> } >>> choosenImageView.invalidate(); >>> mode = NONE; >>> Log.d(TAG, "mode=NONE"); >>> return true; >>> >>> } >>> choosenImageView.invalidate(); >>> return true; >>> } >>> >>> >>> Help needed! >>> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to >> [email protected]<javascript:> >> To unsubscribe from this group, send email to >> [email protected] <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Android Developers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

