Java 基本Android:如何在Android中处理按钮上的iPressed操作
我使用isEnabled()编写了一个工作代码 现在,我想在按下按钮时发送数据包,而不是单击按钮时发送数据包。我该怎么处理? 当我尝试iPressed而不是iEnabled时,屏幕是空白的,活动甚至没有显示出来Java 基本Android:如何在Android中处理按钮上的iPressed操作,java,android,onclick,Java,Android,Onclick,我使用isEnabled()编写了一个工作代码 现在,我想在按下按钮时发送数据包,而不是单击按钮时发送数据包。我该怎么处理? 当我尝试iPressed而不是iEnabled时,屏幕是空白的,活动甚至没有显示出来 编辑:还尝试了btn.isPressed()-它不起作用。。。udp数据包在我点击按钮后立即被发送。。。我希望它只在我按下时发送 任何帮助都将不胜感激。 谢谢不确定这是否有效,但值得一试 @Override public void onClick(View v) {
编辑:还尝试了btn.isPressed()-它不起作用。。。udp数据包在我点击按钮后立即被发送。。。我希望它只在我按下时发送 任何帮助都将不胜感激。
谢谢不确定这是否有效,但值得一试
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.isPressed()){
//do sth.
}
else{
//do sth. else
}
}
您将希望使用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;
}
});
你的情况不明。“仅当我按下时”意味着当按钮开始按下时,您将开始发送,这意味着打开MotionEvent.ACTION\u DOWN
。如果希望在执行操作之前有一些延迟,请创建一个计时器线程,该线程将在检测到MotionEvent.action\u DOWN
时启动,并在几秒钟后执行操作。当检测到MotionEvent.ACTION\u UP
时,计时器也应重置,或者如果该操作已在进行中,则中断该操作
但是老实说,你可能想重新表述你的情况。你的意思是当用户点击按钮并用手指按住按钮时,你想做些什么?请澄清。udp数据包在我点击按钮后立即发送。。。我希望它只在我按下时发送。。。我不想点击任何动作。。。只有当他把手指放在上面的时候。。。不,那不起作用。。。它应该在setOnclickListener中吗?if(btnTalk.isEnabled()){btnTalk.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){if(v.isPressed()){???还尝试了btn.isPressed()-它不工作…udp数据包在我点击按钮后立即发送…我只想在我按下它时发送…这似乎是您所述问题的正确解决方案…您确定您正在以其他示例所示的方式实现它吗?或者,您是否正在寻找OnLongClickListener?而不是计时器,我可以ld终止UDP连接…但这似乎效率低下?…我认为它的“措辞”非常完美。我正在使用onTouchListener和MotionEvent.ACTION\u。为什么我只需要长点击Listener?我重新阅读了这个问题,也许想澄清一下-“是否可以发送数据包(思考语音)按下按钮时,然后在释放按钮时终止连接?“使用上述方法,只需定义一个向下运行的计时器,并在向上运行时取消它。您还需要向请求添加某种形式的取消,而不仅仅是计时器。因此,您需要将请求和计时器作为类变量。
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;
}
});