我的列表中有不同的路径,我想一次在画布上绘制一个路径,但我正在执行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);
}
答案 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);
}
}