我想将点击动作附加到搜索栏上以执行某些操作。
我试图通过在setOnLongClickListener
和onStopTrackingTouch
方法上实现onProgressChanged
来做到这一点,但它不起作用。
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) {
textView.setText("" + progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
seekBar.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ToastMaker("LongPress");
return false;
}
});
}
});
我的最终目标是为onProgressChanged
设置seekbar的第10或20步,当用户按住seekbar时,step值将更改为1(使用incrementProgressBy(1)
方法),以便用户可以在上选择精确值远程搜索栏。
如果您使用三星的视频编辑器,他们会做同样的事情。您可以快速滚动视频时间轴,当您想选择按住搜寻栏的确切时间时,也可以选择自己喜欢的确切时间(请看gif波纹管)
答案 0 :(得分:0)
您可以尝试使用onTouchEvent()
这样覆盖搜索栏的触摸事件
private var isLongPress = false
private val longPressHandler = Handler()
private val onLongPress = Runnable {
isLongPress = true
//do whatever you want on long press
}
private val onPress = {
//do on normal press
}
override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
//on action down we start the long press handler
longPressHandler.postDelayed(onLongPress, 500)
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
if (isLongPress) {
//if 500ms passed and user lifts the finger
isLongPress = false
} else {
//if 500ms didn't pass and user lifts his finger before that time we cancel long press click and treat it as normal press
longPressHandler.removeCallbacks(onLongPress)
onPress()
}
}
}
return true
}