Как дождаться, пока путь на холсте будет нарисован в Android?
У меня есть разные пути в моем списке, и я хочу рисовать один путь на холсте за раз, но я выполняю цикл 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);
}
Код метода onDraw(Canvas canvas). Размер переменной списка 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);
}
1 ответ
Вы можете создать 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);
}
}