0

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 です。

4

2 に答える 2

2

ただ、動きを検知しているのですから、動きを検知している間は温度が上がり続けるのではないでしょうか?

tempの開始時にリセットしたためonTouchEvent:

public boolean onTouchEvent(MotionEvent event){
 ...
float temp = 0.0f;

グローバルに設定しますがonTouchEvent、メソッドでは設定しません

 public class YourClass{

  private float temp = 0.0f;
  ...
 }
于 2013-09-13T11:38:48.523 に答える
1

メソッド内temp変数を宣言しているため、新しい MOVE イベントごとに 0 に再設定されます。onTouchEvent() の外で宣言してみて、変化を観察してください。onTouchEvent()temp

于 2013-09-13T11:39:32.053 に答える