Thanks for the responses.

To TreKing : I quite clearly explained that the drawing area was where I 
needed to optimise. You can see that I trace the time taken here and this 
is where I can say that, on the emulator, it takes 18 seconds.

to lbendlin : Thank you for the advice, I will do some further tests to see 
if this will affect the processing time.

On Friday, 18 May 2012 02:16:47 UTC+2, lbendlin wrote:
>
> No need to worry about the screen pixels relative to your waypoints. The 
> overlay manager handles that for you, and only renders the part that is on 
> screen. Load all the points.
>
> On Thursday, May 17, 2012 12:19:33 PM UTC-4, Simon Giddings wrote:
>>
>> I am developing a maps application which will display a user defined 
>> driving itinerary.
>> I obtain the driving directions from the Directions Web Service and parse 
>> the json response in a separate thread.
>>
>> I then hand the resulting itinerary object to my custom overlay for 
>> display.
>> Before appending the overlay to the maps overlay list, I decode the 
>> polyline strings to obtain the coordinates.
>>
>> My drawing code obtains the projection object and draws out the line - 
>> this is taking 18 seconds ! ! !
>> Here is my code :
>>
>>     @Override
>>     public void draw(Canvas cv, MapView view, boolean shadow)
>>     {
>>         GeoCoordsE6 point = null;  // utility class holding a geopoint 
>> and a point class with a method to handle projection manipulation
>>         int iScreenWidth = view.getWidth();
>>         int iScreenHeight = view.getHeight();
>>         Paint paintLine = null;new Paint();
>>         
>>         if(shadow)
>>         {
>>             super.draw(cv, view, shadow);
>>             return;
>>         }
>>         
>>         long lStartMs = android.os.SystemClock.uptimeMillis();
>>         
>>         paintLine = new Paint();
>>         paintLine.setColor(m_iLineClr);
>>         paintLine.setAntiAlias(true);
>>         paintLine.setStyle(Paint.Style.FILL_AND_STROKE);
>>         paintLine.setStrokeJoin(Paint.Join.ROUND);
>>         paintLine.setStrokeCap(Paint.Cap.ROUND);
>>         paintLine.setStrokeWidth(4);
>>         
>>         // get the projection to work with
>>         Projection pj = view.getProjection();
>>         
>>         // get the first lat/lng position
>>         point = m_ItinLine.item(0);
>>         // convert the coorinates to screen pixels
>>         point.ResolvePosition(pj);
>>         // store the start position
>>         m_ptStart.x = point.m_pt.x;
>>         m_ptStart.y = point.m_pt.y;
>>         
>>         // now walk through the array list
>>         for(int i = 1; i < m_ItinLine.count(); i++)
>>         {
>>             point = m_ItinLine.item(i);
>>             point.ResolvePosition(pj);
>>             m_ptEnd.x = point.m_pt.x;
>>             m_ptEnd.y = point.m_pt.y;
>>             
>>             if(m_ptStart.x < 0 && m_ptEnd.x < 0 ||        // to the left 
>>                     m_ptStart.y < 0 && m_ptEnd.y < 0 ||    // above the 
>> top
>>                     m_ptStart.x > iScreenWidth && m_ptEnd.x > 
>> iScreenWidth ||    // to the right
>>                     m_ptStart.y > iScreenHeight && m_ptEnd.y > 
>> iScreenHeight)    // below the bottom
>>             {
>>                 // ignore the drawing
>>             }
>>             else if(m_ptStart.x == m_ptEnd.x && m_ptStart.y == m_ptEnd.y)
>>                 continue;
>>             else
>>             {
>>                 cv.drawLine(m_ptStart.x, m_ptStart.y, m_ptEnd.x, 
>> m_ptEnd.y, paintLine);
>>             }
>>             
>>             m_ptStart.x = m_ptEnd.x;
>>             m_ptStart.y = m_ptEnd.y;
>>         }
>>         
>>         long lEndMs = android.os.SystemClock.uptimeMillis();
>>         Log.d("ItineraryOverlay", "Drawing took " + (lEndMs - lStartMs) + 
>> "ms");
>>         
>>         super.draw(cv, view, shadow);
>>     }
>>
>> Knowing that a number of people have done similar tasks, can anyone 
>> advise me as to how to improve the performance ?
>> Should I be building a path object and fill it with ALL of the points ?
>>
>>
>>

-- 
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

Reply via email to