2014-10-20 4 views
0

Итак, у меня есть пользовательский вид, где я пытаюсь выполнить анимацию чертежа, используя методы 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); 


     } 

    } 








} 

ответ

0

Я была такая же Prob, поместить это в ваш OnDraw:

((Main) context).runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     CustomView.this.invalidate(); 

    } 
}); 
Смежные вопросы