我想制作一个按钮,可以告诉我按下多长时间。如果按钮停止按下,时间仍然停留在那里,那么你可以继续按下它。我怎么能这样做?
使用此代码,我按了5秒按钮 - 按下打开一个新活动:)
公共类MainActivity扩展了ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1=(Button)findViewById(R.id.button1);
final Handler handel = new Handler();
button1.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN:
handel.postDelayed(run, 5000/* OR the amount of time you want */);
break;
default:
handel.removeCallbacks(run);
break;
}
return true;
}
Runnable run = new Runnable() {
@Override
public void run() {
Intent i = new Intent(MainActivity.this, SecActivity.class);
startActivity(i);
}
};});
}}
答案 0 :(得分:1)
如果你的意思是按钮计数按下的时间,你可以使用:
int count = 0;
(your button).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
count++;
}
});
如果你的意思是持有它的时间越长,你就可以使用:
long time = 0;
(your button).setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == event.ACTION_DOWN){
time = System.currentTimeMillis();
}else if( event.getAcion() == event.ACTION_UP){
time = System.currentTimeMillis() - time;
}
return true;
}
});
注意:你的变量如(int count)和(long time)应该在你的类的主体中声明而不是方法;
下面的代码是一个示例代码,用于识别双击自定义时间的视图;
boolean isPressed = false;
long delayed = 1000;
final Hanlder handler = new Handler();
Button b;
b.setOnClickListener(new View.onClickListener(){
public void onClick(View v){
if(isPressed == true){
// recognize double click;
}else{
Toast.makeText(getApplicationContext(),"tap again to exit",1).show();
isPressed = true;
handler.postDelayed(new Runnable(){
public void run(){
isPressed = false;
}
},delayed);
}
});
答案 1 :(得分:0)
尝试使用TouchListener:
Handler handel = new Handler(); b.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN:
handel.postDelayed(run, 5000);
break;
default:
handel.removeCallbacks(run);
break;
}
return true;
}
});
稍后定义run:
Runnable run = new Runnable(){
@Override
public void run() {
// Your code to run on long click
}
};
答案 2 :(得分:0)
在按下按钮和释放按钮时设置监听器。创建一个在按下按钮后记录的计时器,并在释放按钮时停止。如果您使用JFrame或Android作为GUI,则应该有两个侦听器。