2016-11-10 4 views
1

Мне нужно настроить корзину поиска по умолчанию для управления музыкальным проигрывателем. Я знаю, это звучит очень просто, но я просто не знаю, как настроить поисковый барабан thumb прослушиватель. Я хочу управлять музыкой и менять значок, чтобы играть и приостанавливать, когда пользователь нажимает на значок большого пальца. Как я могу это достичь? Я знаю, что это возможно, потому что раньше я видел приложения, подобные PocketGuide, где реализована эта функциональность. Вот скриншот из приложения PocketGuide enter image description hereстрелка указателя мыши onclicklistener

+0

Простейший способ архивирования этого (на мой взгляд) заключается в создании CustomView для этого. Если вы хотите, я мог бы ответить с примером для его архивации. –

+0

@ Kenny Seyffarth было бы замечательно. Мне просто нужно контролировать какое-либо действие, нажимая на значок поиска. – 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); 
    } 
}