私が考えることができる唯一の解決策は、最初に onDraw に、実際のキャンバスと等しい変数 Canvas があり、次に数字を描画することです。
paint.setColor(Color.BLACK);
canvas.drawText(strValue, x, y, paint);
次に、赤い Rect を描画します
canvas.drawRect(myRect, redPaint);
それからあなたはあなたの線を引きます
canvas.drawline(mStartX,mStartY, mFinishX, mFinishY, myLinePaint);
onDraw の最後で、次のようなメソッドを呼び出します。
public void myMethod(){
Paint paint = new Paint();
paint.setColor(Color.BLACK);
this.canvas.drawText(strValue, x, y, paint);
//here you will define the area that you will mark as dirty
//(wich can have the same values as your red Rect)
Rect myRect = new Rect();
myRect.set(x0,y0,x1,y1);
//and finally here you invalidate ONLY the red area
this.canvas.invalidate(myRect);
}
注: これには、onDraw でグローバル Canvas が null でないことを確認する必要があり、そうであれば、グローバルを実際のものと等しくする必要があります。これが実際に機能するかどうかはわかりませんが、そうすることが考えられる唯一の解決策です。