2016-11-10 34 views
1

我需要自定義默認的android seekbar來控制音樂播放器。我知道這聽起來很簡單,但我不知道如何設置seekbar thumb監聽器。我想要控制音樂並相應地更改圖標以在用戶按下seekbar拇指圖標時播放和暫停。我怎樣才能做到這一點?我知道這是可能的,因爲我之前看到PocketGuide這樣的應用程序實現了這個功能。這裏是PocketGuide應用程序的屏幕截圖enter image description hereseekbar thumb onclicklistener

+0

最簡單的方法來歸檔這(在我看來)是爲此創建一個CustomView。如果你想我可以用一個例子來回答這個問題。 –

+0

@Kenny Seyffarth這將是驚人的。我只需要通過按下seekbar thumb來控制一些動作 – David

+1

Thumb是可繪製的,因此您不能直接設置點擊監聽器 但設置OnSeekBarChangeListener會通知您有關在onStartTrackingTouch中開始的觸摸,並在onStopTrackingTouch 沒有改變,這是一個點擊拇指 – zombie

回答

3

也許這會幫助你。根據您的需求調整代碼。

public class SeekbarWithThumbTouch extends SeekBar { 

    private int  scaledTouchSlop = 0; 
    private float initTouchX  = 0; 
    private boolean thumbPressed = false; 

    public SeekbarWithThumbTouch(Context context) { 
     super(context); 
     init(context); 
    } 

    public SeekbarWithThumbTouch(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public SeekbarWithThumbTouch(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context); 
    } 

    private void init(Context context) { 
     scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Drawable thumb = null; 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       thumb = getThumb();//works only for API >=16! 
       if (thumb != null) { 
        //contains current position of thumb in view as bounds 
        RectF bounds = new RectF(thumb.getBounds()); 
        thumbPressed = bounds.contains(event.getX(), event.getY()); 
        if (thumbPressed) { 
         Log.d("Thumb", "pressed"); 
         initTouchX = event.getX(); 
         return true; 
        } 
       } 
       break; 
      case MotionEvent.ACTION_UP: 
       if (thumbPressed) { 
        Log.d("Thumb", "was pressed -- listener call"); 
        thumbPressed = false; 
       } 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (thumbPressed) { 
        if (Math.abs(initTouchX - event.getX()) > scaledTouchSlop) { 
         initTouchX = 0; 
         thumbPressed = false; 
         return super.onTouchEvent(event); 
        } 
        Log.d("Thumb", "move blocked"); 
        return true; 
       } 
       break; 
     } 

     return super.onTouchEvent(event); 
    } 
}