amp*_*dre 17 android event-handling
在我正在处理的应用程序中,我要求用户必须在特定操作发生之前单击并按住组件一段时间.
我目前正在使用OnLongClickListener来监听longclick,但我发现触发OnLongClick事件的单击长度太短.
例如,假设LongClick事件在400ms单击后触发,但我希望用户必须在事件触发前单击并保持1200ms.
有没有什么办法可以配置LongClick事件需要更长的点击?
或者是否有另一种结构可以让我倾听更长的点击次数?
Roh*_*han 20
无法在onLongClick事件上更改计时器,它由android本身管理.
可能的是使用.setOnTouchListener().
然后在MotionEvent是ACTION_DOWN时注册.
注意变量中的当前时间.
然后当注册带有ACTION_UP的MotionEvent并且current_time - actionDown时间> 1200 ms然后执行某些操作.
非常好:
Button button = new Button();
long then = 0;
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
then = (Long) System.currentTimeMillis();
}
else if(event.getAction() == MotionEvent.ACTION_UP){
if(((Long) System.currentTimeMillis() - then) > 1200){
return true;
}
}
return false;
}
})
Run Code Online (Sandbox Code Playgroud)
这是我发现实现此行为的最简单方法。与当前接受的答案相比,它有几个优点。
view.isPressed我们确保在触摸事件离开视图时不会触发onClick和onLongClick。这模仿了系统的默认onClick和onLongClick行为。ACTION_DOWN或计算当前时间ACTION_UP。这意味着我们可以同时将它用于多个视图,因为我们没有在onTouch.注意:ViewConfiguration.getLongPressTimeout()是默认值,您可以更改该检查以使用您想要的任何值。
注意:如果视图通常不会点击你需要调用view.setClickable(true)的view.isPressed()检查工作。
@Override
public boolean onTouch(View view, MotionEvent event) {
if (view.isPressed() && event.getAction() == MotionEvent.ACTION_UP) {
long eventDuration = event.getEventTime() - event.getDownTime();
if (eventDuration > ViewConfiguration.getLongPressTimeout()) {
onLongClick(view);
} else {
onClick(view);
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果您像@ampersandre 一样,希望在达到延迟期后立即触发长按事件而不是等待,ACTION_UP那么以下对我来说效果很好。
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
view.setTag(true);
} else if (view.isPressed() && (boolean) view.getTag()) {
long eventDuration = event.getEventTime() - event.getDownTime();
if (eventDuration > ViewConfiguration.getLongPressTimeout()) {
view.setTag(false);
onLongClick(view);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
onClick(view);
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13760 次 |
| 最近记录: |