ペイントアプリでビューを再描画するのに問題があります。タッチが終了したら、touch_up()を呼び出してパスを作成し、invalidate()を呼び出してパスを描画し、storeView()を呼び出して現在のビューをスタックにプッシュします。ただし、ビューはまったく再描画されません(次のタッチまで、ひねくれた効果が得られます)。storeView()の呼び出しを削除すると、すぐに再描画されます。
ここから、問題がinvalidate()であることがすぐに発生するとは限らないことを理解し、それを待つために新しいスレッドまたはハンドラーを作成する必要があると思います。開発ページを読んだにもかかわらず、私はそれを実装する方法を完全には理解していません。
それは本当に私がする必要があることですか?ビューが再描画されるまでstoreView()を待機させるにはどうすればよいですか?私はこれとしばらく戦ってきました、答えは私の日を作るでしょう。ありがとう!
これが私が現在していることです。
Action_up:
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
storeView();
break;
Touch_up:
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();
}
storeView:
public void storeView(){
historyCount++;
if(historyCount > historySize) historyCount = 6; //We don't want more than 6
history.add(Bitmap.createBitmap(myView.getDrawingCache()),historyCount);
}