单击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