【发布时间】:2014-10-20 01:19:56
【问题描述】:
所以我有一个自定义视图,我在其中尝试使用 moveto() 和 lineto() 的 Path 方法执行绘图动画。我有一个点数组,我遍历并在每次迭代时调用 invalidate() 。在 onDraw 中,路径是使用 drawPath() 绘制的。当然,在循环完成之前不会调用 onDraw。我相信我需要在后台线程中执行迭代。但与此同时,我读到在后台线程中执行 UI 更改是不好的做法。如何在每次迭代中重绘?
@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);
}
}
}
【问题讨论】:
标签: java android ondraw invalidation