[英]How to Identify pressing the volume button for a specified time period in android
[英]How to see duration actively how much time pressing button on android
這是我的代碼。 我想積極地看看有多少第二次按下按鈕,我也想生動地做到這一點。 如果我按下按鈕,Textview 應該每秒更新一次。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
textView = findViewById(R.id.textView);
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
textView.setText("Time: "+timer);
timer++;
}
};
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
while(!button.isPressed())
{
handler.postDelayed(runnable,1000);
}
}
else if(event.getAction()==MotionEvent.ACTION_UP)
{
handler.removeCallbacks(runnable);
}
return false;
}
});
}
順便說一句,這段代碼崩潰了,因為 while 循環不能按我想要的方式工作。 如果我不使用任何循環,textview 只更新了 1 次。 我希望它每秒更新一次。 感謝所有願意提供幫助的人。
我找到了解決這個問題的方法。 該方法屬於處理程序 post() ,它在它所在的位置開始運行,讓我免於這個問題。 有代碼。
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
handler.postDelayed(runnable,1000);
textView.setText("Time: "+timer);
timer++;
}
};
handler.post(runnable);
}
else if(event.getAction()==MotionEvent.ACTION_UP)
{
handler.removeCallbacks(runnable);
}
return false;
}
});
當 down 事件開始時,運行方法從它開始。 運行方法是超過 1 秒后然后退出它。 如果 1 秒后仍然按下按鈕,則處理程序永遠不會停止可運行,因此可運行事件會一次又一次地開始。 這是簡單的可運行和處理程序循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.