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