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.


Reply via email to