0

I have different Path's in my List and I want to draw one Path on Canvas at a time but I am executing a for loop and while drawing one path another path starts to be drawn on Canvas. What can I do to stop the for loop or wait until the path is drawn. for loop is given below.

                   for ( i = 0; i < mPaths.size(); i++) {
                        SvgHelper.SvgPath svgPath = mPaths.get(i);
                        svgPath.paint.setAlpha(255);
                        canvas.drawPath(svgPath.path, svgPath.paint);                           
                    } 

onDraw(Canvas canvas) method code. Size of mPaths List variable is 24. The thing is want to draw one path at a time but when i keep it in for loop all 24 paths are drawn simultaneously.

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // Log.w("On draw", "Executing Ondraw");

        synchronized (mSvgLock) {

            canvas.save();

            canvas.translate(getPaddingLeft(), getPaddingTop()
                    - getPaddingBottom());

                canvas.save();

                canvas.translate(getPaddingLeft(), getPaddingTop()
                        - getPaddingBottom());

                for (i = 0; i < mPaths.size(); i++) {
                    //
                    Log.w("no of times", String.valueOf(i));
                    //
                    synchronized (Lock) {

                        SvgHelper.SvgPath svgPath = mPaths.get(i);
                        svgPath.paint.setAlpha(255);
                        canvas.drawPath(svgPath.path, svgPath.paint);
                    }

//                  break;
                }

                canvas.restore();

        }

        canvas.save();
        canvas.translate(0.0f, getHeight() - getPaddingBottom() - mRadius
                * 3.0f);
    }
Mohammed Rampurawala
  • 3,033
  • 2
  • 22
  • 32

1 Answers1

0

You can create a Object for lock and put you core code in Synchronized block.

Try this;

Object lock = new Object();
for ( i = 0; i < mPaths.size(); i++) {
    synchronized (lock) {
        SvgHelper.SvgPath svgPath = mPaths.get(i);
        svgPath.paint.setAlpha(255);
        canvas.drawPath(svgPath.path, svgPath.paint);
    }               
}
callofdutyops
  • 318
  • 3
  • 9