我使用isEnabled()编写了一个工作代码。
if(btn.isEnabled()){
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// say send a udp packet
}
}
);
}
现在,而不是单击按钮时要发送的数据包,我想在按下时发送它。我该如何处理? 当我尝试isPressed而不是isEnabled时,有一个空白的屏幕,甚至没有显示活动......
编辑:也尝试了btn.isPressed() - 它不起作用...我点击按钮后立即发送udp数据包...我希望它只在我按下时发送...任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
MotionEvent.ACTION_DOWN
。如果在执行操作之前需要一些延迟,请创建一个在检测到MotionEvent.ACTION_DOWN
时启动的计时器线程,并在几秒钟后执行您的操作。当检测到MotionEvent.ACTION_UP
时,计时器也应该重置,或者如果操作已在进行中,则中断操作。
但老实说,你可能想改写自己的病情。
答案 1 :(得分:0)
不确定这是否有效,但值得一试
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.isPressed()){
//do sth.
}
else{
//do sth. else
}
}
答案 2 :(得分:0)
你想要使用onTouchListener而不是onClick和东西。您还希望在用户离开时跟踪小的更改。
编辑添加计时器内容
Timer timer;
UDP request;
btn.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
//TODO start sending udp in background
timer = new Timer();
timer.schedule(new TimerTask(){
public void run(){
request.start();
}
},DELAY_MS);
}
if(event.getAction() == MotionEvent.ACTION_UP){
//TODO stop sending udp
timer.cancel()
if(request.isTransmitting()){
request.stop();
}
}
//needed to get both calls
return true;
}
});