Java 基本Android:如何在Android中处理按钮上的iPressed操作

Java 基本Android:如何在Android中处理按钮上的iPressed操作,java,android,onclick,Java,Android,Onclick,我使用isEnabled()编写了一个工作代码 现在,我想在按下按钮时发送数据包,而不是单击按钮时发送数据包。我该怎么处理? 当我尝试iPressed而不是iEnabled时,屏幕是空白的,活动甚至没有显示出来 编辑:还尝试了btn.isPressed()-它不起作用。。。udp数据包在我点击按钮后立即被发送。。。我希望它只在我按下时发送 任何帮助都将不胜感激。 谢谢不确定这是否有效,但值得一试 @Override public void onClick(View v) {

我使用isEnabled()编写了一个工作代码

现在,我想在按下按钮时发送数据包,而不是单击按钮时发送数据包。我该怎么处理? 当我尝试iPressed而不是iEnabled时,屏幕是空白的,活动甚至没有显示出来


编辑:还尝试了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;
     }
});