2016-11-10 11 views
1

私は音楽プレーヤーを制御するためにデフォルトのアンドロイドシークバーをカスタマイズする必要があります。私はこれがとても簡単だと知っていますが、シークバーを設定する方法がわかりません親指リスナー。私は音楽を制御し、それに応じてアイコンを変更して、シークバーサムアイコンを押すと再生して一時停止するようにします。どうすればこれを達成できますか?以前はこの機能が実装されているPocketGuideのようなアプリを見ていたのでこれが可能だと私は知っています。ここにPocketGuideアプリからのスクリーンショットがありますenter image description hereseekbar thumb onclicklistener

+0

私の意見では、これをアーカイブする最も簡単な方法は、このためにCustomViewを作成することです。あなたが望むなら、私はこれをアーカイブするための例で答えることができます。 –

+0

@ケニーSeyfarthそれは素晴らしいだろう。シークバーの親指 – 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); 
    } 
}