2016-09-10 140 views
1

onStopTrackingTouch事件被激發兩次,這是一個問題,因爲我只需要創建一個getRequest。這裏是我的代碼:MotionEvent.ACTION_UP事件使用seekbar觸發兩次

VerticalSeekbar.java

public boolean onTouchEvent(MotionEvent event) { 

if (!isEnabled()) { 
    return false; 
} 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_MOVE: 
      super.onTouchEvent(event); 
      int progress = getMax() - (int) (getMax() * event.getY()/getHeight()); 
      // Ensure progress stays within boundaries 
      if(progress < 0) {progress = 0;} 
      if(progress > getMax()) { 
       progress = getMax();} 
      setProgress(progress); // Draw progress 
      if(progress != lastProgress) { 
       // Only enact listener if the progress has actually changed 
       lastProgress = progress; 
       Information.onSeekBarChangeListener.onProgressChanged(this, progress, true); 
      } 
      onSizeChanged(getWidth(), getHeight() , 0, 0); 
      Log.i("radio", "action move"); 
      setPressed(true); 
      setSelected(true); 
     case MotionEvent.ACTION_UP: 
      Log.i("radio", "action up"); //printed twice 
      Information.onSeekBarChangeListener.onStopTrackingTouch(this); 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
    } 
    return true; 
} 

Information.java

onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 
      radio = (progress/(double) 10); 
      tv_radio.setText(radio + " Km"); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar){ 
      Log.i("vertical", "onStart"); 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar){ 
      Log.i("vertical", "onStopTracking"); //printed twice 
      getRequest request = new getRequest(); 
      request.execute("http://..."); 
     } 
    }; 
    sb_radio.setOnSeekBarChangeListener(onSeekBarChangeListener); 

任何想法,爲什麼兩次檢測MotionEvent.ACTION_UP?即使我只是簡單地點擊Seekbar而不拖動。

回答

1

TouchListener將被要求每MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP,並且MotionEvent.ACTION_MOVE

所以問題是,有那麼即使當你跌到下MotionEvent.ACTION_MOVE情況下,控制break語句MotionEvent.ACTION_MOVE後失蹤會繼續執行,進一步直至達到一些停止點,如break

switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_MOVE: 
      super.onTouchEvent(event); 
      int progress = getMax() - (int) (getMax() * event.getY()/getHeight()); 
      if(progress < 0) {progress = 0;} 
      if(progress > getMax()) { 
       progress = getMax();} 
      setProgress(progress); 
      if(progress != lastProgress) { 
       lastProgress = progress; 
       Information.onSeekBarChangeListener.onProgressChanged(this, progress, true); 
      } 
      onSizeChanged(getWidth(), getHeight() , 0, 0); 
      Log.i("radio", "action move"); 
      setPressed(true); 
      setSelected(true); 
      break;   // add a break statement here and problem solved 
     case MotionEvent.ACTION_UP: 
      Log.i("radio", "action up"); 
      Information.onSeekBarChangeListener.onStopTrackingTouch(this); 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
    } 
    return true; 
}