单击Seekbar的拇指

我想在seekbar的大拇指上注册一个可点击事件,以便在用户使用它时触发事件。 可能吗?


结合zwebie和Nermeens的解决方案:

seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    private int mProgressAtStartTracking;
    private final int SENSITIVITY;

    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        // handle progress change
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        mProgressAtStartTracking = seekBar.getProgress();
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        if(Math.abs(mProgressAtStartTracking - seekBar.getProgress()) <= SENSITIVITY){
            // react to thumb click
        }
    }
});

所以这只会在拇指点击时触发,而不是在拇指移动上,而不是点击其他部分的搜索栏。

您可以调整灵敏度,因为有时点击已经略微移动了拇指,并且允许很小的变化,而仍然点击不那么令人沮丧。 这里的一个好的值取决于seekbar的大小和它可以拥有的最大值。 对于我来说,3在纵向布局上最大为50的全宽搜索栏上效果很好。


我能够通过以下方式实现这一点:

seekBar.setOnTouchListener(new OnTouchListener() 
{
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        if(event.getAction() == MotionEvent.ACTION_MOVE)
        {
            changedPosition = true;
            seekBar.setProgress(seekBar.getProgress());
            return false;
        }
        else if (event.getAction() == MotionEvent.ACTION_UP)
        {
            if(!changedPosition)
            {
                  //do action here
            }
        }
   }

希望这可以帮助


我这样做:

pagesSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { //listener
        @Override
        public void onStopTrackingTouch(final SeekBar seekBar) {
            //add your event here
        }

        @Override
        public void onStartTrackingTouch(final SeekBar seekBar) {
        }

        @Override
        public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) {
                updateControls(progress, false);
        }
    });
链接地址: http://www.djcxy.com/p/11039.html

上一篇: Seekbar's thumb on click

下一篇: Why does ICollection not contain an Add method?