Итак, у меня есть пользовательский вид, где я пытаюсь выполнить анимацию чертежа, используя методы Path для moveto() и lineto(). У меня есть массив точек, которые я повторяю и вызываю invalidate() на каждой итерации. В onDraw путь рисуется с помощью drawPath(). Конечно, onDraw не вызывается до тех пор, пока цикл не будет выполнен. Я считаю, что мне нужно выполнить итерации в фоновом потоке. Но в то же время я читал, что плохая практика выполняет изменения пользовательского интерфейса в фоновом потоке. Как я могу перерисовать на каждой итерации?Выполнение анимации пути в пользовательском представлении
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPaint(mBackgroundPaint);
canvas.drawPath(mPath, mStrokePaint);
}
public void drawPoints(){
mPath = new Path();
for (Stroke stroke : mStrokes){
mDuration = stroke.getStrokeDuration();
mInitialX = stroke.getInitialX();
mInitialY = stroke.getInitialY();
mPath.moveTo(mInitialX, mInitialY);
invalidate();
mPoints = new ArrayList<Point>();
mPoints = stroke.getStrokePoints();
int s = mPoints.size();
long delayTime = mDuration/(long) s;
for(Point point : mPoints){
mX = point.getX();
mY = point.getY();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mPath.lineTo(mX, mY);
// want to call invalidate to redraw canvas
invalidate();
}
}, delayTime);
}
}
}