View から拡張されたクラス内に次の onTouchEvent() 関数を実装しました。
public boolean onTouchEvent(MotionEvent event){
// Log.d("MYLOG","TOUCH EVENT OCCURED");
int i, pointToTrack = 0;
boolean trackAPoint = false;
float temp = 0.0f;
float x = event.getX();
float y = event.getY();
// Log.d("MYLOG","TOUCH AT ("+Float.toString(x)+","+Float.toString(y)+")");
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Toast.makeText(getApplicationContext(), "ACT_DOWN", Toast.LENGTH_SHORT).show();
// Log.d("MYLOG", "ACT_DOWN");
for(i=0; i<NUM_OF_GRAPH_POINTS; i++){
// if(graphPoints[i][0] == y){
if(Math.abs(graphPoints[i][0] - y)<10.0f ){
pointToTrack = i;
trackAPoint = true;
Log.d("MYLOG", "PRESSED PNT = "+Float.toString(y));
}
}
break;
case MotionEvent.ACTION_MOVE:
// Toast.makeText(getApplicationContext(), "ACT_MOVE", Toast.LENGTH_SHORT).show();
// Log.d("MYLOG", "ACT_MOVE");
/*
if(trackAPoint == true){
graphPoints[pointToTrack][1] = y;
}
*/
temp = temp + 10.0f;
Log.d("MYLOG", "temp="+Float.toString(temp));
receiveGainValues(temp);
break;
case MotionEvent.ACTION_UP:
// Toast.makeText(getApplicationContext(), "ACT_UP", Toast.LENGTH_SHORT).show();
// Log.d("MYLOG", "ACT_UP");
trackAPoint = false;
break;
}
// invalidate();
postInvalidate();
return true;
}
特にこのセクションを見てください:
case MotionEvent.ACTION_MOVE:
// Toast.makeText(getApplicationContext(), "ACT_MOVE", Toast.LENGTH_SHORT).show();
// Log.d("MYLOG", "ACT_MOVE");
/*
if(trackAPoint == true){
graphPoints[pointToTrack][1] = y;
}
*/
temp = temp + 10.0f;
Log.d("MYLOG", "temp="+Float.toString(temp));
receiveGainValues(temp);
break;
タブレットの表面上で指を動かしている間、logcat は temp = 10 を複数回表示します。ただ、動きを検知しているのですから、動きを検知している間は温度が上がり続けるのではないでしょうか?一度増加してから停止し、それでもその下の Log.d() が呼び出され続けるのはなぜですか?
関連する場合、タブレットは Android 4.3 および API レベル 18 を搭載した nexus 7 です。