gcluelabs/TouchSample003 — pull request #1 by wanderercat (2013-09-11 04:54:19+00:00)
Title: コード修正

167行目にあるaddPoint()メソッド内のfor文を削除。
このfor文の制御式 i < points.size - 1 はtrueになる事はなく実行されないからです。
例えばindexが2だとするとpointsリスト内のindexメンバは0,1,2で3つ、つまり、
2 < 3 -1 = 2 < 2 となり実行されません(公式にすると、アクションインデックスが n の場合は　pointsリスト内の要素数は　(n + 1) つまり、n < (n + 1) - 1 = n < n　となる)。
更に、そもそもこのfor文は実行されなくていいのです。
何故かというと、、タッチダウン時にシステムがそれぞれのタッチのアクションインデックスを0 , 1, 2...というように順番通り昇順に割り当てるからです。例えば、３本の指で画面をタッチしている場合アクションインデックスは 1本目の指 i = 0, ２本目の指 i = 1, 3本目の指 i =2 と割り当てられ、もし i = 1 の指が画面から離れた場合は 1本目の指 i = 0,　　　　　, 3本目の指 i =１となり、画面から離れた指より大きいアクションインデックスを持つアクションインデックスが一つ減ります(このアクションインデックスの変化にともなったpointsリスト内でのindexメンバに対する減算処理はremovePoint()メソッド内のfor文で実装されていますね)。
次に、1本目の指 (0) と3本目の指 (1) で２箇所をタッチしている状態から3箇所目を他の指でタッチすると、その指には i = 2 のアクションインデックスが割り当てられます。
このように、新しくタッチした指には、常に既存のアクションインデックス(0,1)よりも大きい値が割り当てられ、その新しくタッチした指に割り当てられたアクションインデックス(この例では2)タッチダウンイベントがonTouchEvent(MotionEvent event)にも渡され、その中で呼び出されているaddPoint(MotionEvent event , int index)にも渡されるので、addPointメソッド内でpointsリストへpoints.add(point)により追加されていくMyPointオブジェクトのindex(アクションインデックス)メンバは常に順番通り昇順にならびます。

以上の事をふまえると、addPoint()内でindxの修正するfor文は必要無いので、このfor文を削除するのが賢明と考え、プログラムを修正させて頂きました。