我在绘画应用程序中重绘视图时遇到问题。当触摸结束时,我调用 touch_up() 来创建路径,调用 invalidate() 来绘制它,并调用 storeView() 来将当前视图压入堆栈。然而,视图根本没有重绘(直到下一次触摸,给它一个抽搐的效果)。如果我删除对 storeView() 的调用,它会立即重绘。
我从这里了解到问题是 invalidate() 不一定会立即发生,我认为我需要创建一个新线程或处理程序来等待它。尽管阅读了开发页面,但我并不完全理解如何实现它。
这真的是我需要做的吗?如何让 storeView() 等到视图被重绘?我已经为此奋斗了一段时间,答案会让我开心。谢谢!
这是我目前所做的。
行动:
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
storeView();
break;
润色:
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
商店视图:
public void storeView(){
historyCount++;
if(historyCount > historySize) historyCount = 6; //We don't want more than 6
history.add(Bitmap.createBitmap(myView.getDrawingCache()),historyCount);
}