2014-11-01 144 views
1

我正在构建一个应急按钮。我想在按住按钮3秒后显示敬酒信息,因此如果人误打错了,它不会发送,但我不知道该怎么做。任何帮助,将不胜感激。Android按钮推送(更新)

public long startTime = 0; 

Button btn = (Button)findViewById(R.id.btnAlert); 

     btn.setOnTouchListener(new View.OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event){ 
       if(event.getAction() == MotionEvent.ACTION_UP){ 
        if((System.currentTimeMillis()- startTime)> 3000){ 
         Toast.makeText(getApplicationContext(), "Alert Received! Emergency Services Will Arrive At Your Location Shortly", Toast.LENGTH_LONG).show(); 
        } 
        return true; 
       } 
       if(event.getAction() == MotionEvent.ACTION_DOWN){ 
        startTime = System.currentTimeMillis(); 
        return true; 
       } 
       return false; 
      } 
     }); 
+0

我试图把在吐司消息的计时器所以它会在3秒后显示,但我想有在按钮上的定时器代替 – 2014-11-01 15:03:55

+0

http://stackoverflow.com/questions/2750835/buttondown和buttonup事件为android屏幕按钮 – codePG 2014-11-01 15:06:40

回答

1

通过onTouchEvent做到这一点。在每个视图中,您可以添加一个onTouchListener()。当您收到ACTION_DOWN事件时,您将读取实际时间并将其存储在startTime变量中。然后,如果您收到一个ACTION_UP事件,您将通过startTime减去实际时间。如果startTime和实际时间之间的时间大于3000毫秒,您将显示Toast消息。我现在无法测试以下代码,但它应该可以工作。

public long startTime = 0; 

button.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

     if(event.getAction() == MotionEvent.ACTION_UP){ 
      if((System.currentTimeMillis() - startTime) > 3000) { 
       //show toast message 
      } 
      return true; 
     } 
     if(event.getAction() == MotionEvent.ACTION_DOWN){ 
      startTime = System.currentTimeMillis(); 
      return true; 
     } 
     return false; 
     } 
}); 
+0

当我测试应用程序现在按钮不会响应点击/触摸 – 2014-11-01 20:23:31

+0

得到此错误“ie/itsligo/medi_cation/Main $ 1#onTouch应调用查看#performClick时检测到一个点击“ – 2014-11-01 20:52:45

+0

在这里你去:http://stackoverflow.com/questions/24952312/ontouchlistener-warning-ontouch-should-call-viewperformclick-when-a-click-is-d – Lubo 2014-11-02 08:09:07