2014-10-20 4 views
0

그래서 moveto() 및 lineto()의 Path 메서드를 사용하여 드로잉 애니메이션을 수행하려고하는 사용자 지정보기가 있습니다. 내가 반복하는 포인트의 배열을 가지고 있고 매 반복마다 invalidate()를 호출한다. onDraw에서 경로는 drawPath()로 그려집니다. 물론 onDraw는 루프가 완료 될 때까지 호출되지 않습니다. 백그라운드 스레드에서 반복을 수행해야한다고 생각합니다. 그러나 동시에 백그라운드 스레드에서 UI 변경을 수행하는 것은 나쁜 습관이라고 읽었습니다. 모든 반복에서 어떻게 다시 그리 수 있습니까?사용자 지정보기에서 경로 애니메이션 수행

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

    } 
}); 
:
@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

나도 같은 확률값을했다, 당신의 onDraw에이를 넣어