如何等到在android中的画布上绘制路径?

时间:2014-08-08 11:42:02

标签: android svg path android-canvas androidsvg

我的列表中有不同的路径,我想一次在画布上绘制一个路径,但我正在执行for循环,而在绘制一条路径时,另一条路径开始在Canvas上绘制。 我该怎么做才能停止for循环或等到绘制路径。 for循环如下。

                   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)方法代码。 mPaths List变量的大小为24。 事情是想要一次绘制一条路径,但是当我将它保持在for循环中时,所有24条路径都会被同时绘制。

@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);
    }

1 个答案:

答案 0 :(得分:0)

您可以为锁定创建Object,并将核心代码放入同步块中。

试试这个;

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);
    }               
}
相关问题