Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中,如何等待路径在画布上绘制?_Android_Svg_Path_Android Canvas_Androidsvg - Fatal编程技术网

在android中,如何等待路径在画布上绘制?

在android中,如何等待路径在画布上绘制?,android,svg,path,android-canvas,androidsvg,Android,Svg,Path,Android Canvas,Androidsvg,我的列表中有不同的路径,我想一次在画布上绘制一条路径,但我正在执行for循环,在绘制一条路径时,另一条路径开始在画布上绘制。 如何停止for循环或等待绘制路径。 下面给出了for循环 for ( i = 0; i < mPaths.size(); i++) { SvgHelper.SvgPath svgPath = mPaths.get(i); svgPat

我的列表中有不同的路径,我想一次在画布上绘制一条路径,但我正在执行for循环,在绘制一条路径时,另一条路径开始在画布上绘制。 如何停止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);                           
                    } 
for(i=0;i
onDraw(画布)方法代码。 mPaths列表变量的大小为24。 问题是我想一次画一条路径,但当我把它保持在循环中时,所有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);
    }
@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
//Log.w(“提款”、“执行Ondraw”);
已同步(mSvgLock){
canvas.save();
translate(getPaddingLeft(),getPaddingTop())
-getPaddingBottom());
canvas.save();
translate(getPaddingLeft(),getPaddingTop())
-getPaddingBottom());
对于(i=0;i
您可以创建一个用于锁定的
对象,并将核心代码放入同步块中

试试这个

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);
    }               
}
对象锁=新对象();
对于(i=0;i
谢谢。我试过这个,但不起作用。它的画是一样的。发布了我的onDraw(Canvas Canvas)方法代码。如果我理解正确,您需要为绘图设置动画,因此在绘图循环中不应使用list.size(),而应使用从1到list.size()的变量变量在onDraw的末尾增加,并使用invalidate taskSorry@curioushikhov调用invalidate或postdayed方法,但请您解释一下您的意思。因为我没有得到..多线程绘制路径?没有onDraw()方法运行24次绘制路径对象,直到绘制的每个路径对象都没有遇到path.close@Marcacierno在本视频中,所有路径都是同时绘制的,我想一个接一个地绘制路径。。视频显示了我的路径是如何绘制的。