基本Android:如何处理Android中按钮的isPressed动作

时间:2011-11-12 02:24:13

标签: java android onclick

我使用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数据包...我希望它只在我按下时发送...

任何帮助将不胜感激。 感谢

3 个答案:

答案 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;
     }
});