[英]How to detect that View is NOT touched/clicked?
我想檢查那個視圖(無論是哪種,在我的情況下是ImageView)都沒有被用戶觸摸/點擊,我想不斷地做。 我認為我應該使用某種線程,但我不知道如何開始。 我想要做的操作是隱藏ActionBar,當沒有動作時我想隱藏它。
觸摸視圖時,我使用以下代碼:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
//if (registerImageViewCallback(slidesPagerAdapter);
gestureImageView = slidesPagerAdapter.getGestureImageView();
gestureImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
getSupportActionBar().show();
return false;
}
});
}
}, 10);
但是,當屏幕未觸及時我必須做什么? :-)
創建一個額外的布爾值(例如:notTouched)為true,然后在onTouch覆蓋中將其設置為false,然后在任何時候你都可以檢查布爾值是true還是false。
編輯:如果你希望它在一段時間沒有被觸摸后隱藏它(如你所說)你可以在一個單獨的線程上的循環中實現一個額外的計數器整數,如下所示:
while(true) {
if (notTouched) {
counter++
if(counter == 20) { // Assuming 20 seconds have passed of not touching
hideMethodHere(); // Execute hiding
}
Thread.sleep(1000); // Sleep for a second (so we dont have to count in miliseconds)
} else {
counter = 0; // If it was touched, reset the counter
notTouched == true; // Reset the touch flag as well because otherwise it will be visible forever if you touch it
}
}
在您的活動中添加一個標志:
boolean wasTouched = true;
添加一個計時器,檢查視圖是否被觸摸:
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if ( wasTouched == false ) {
runOnUiThread(new Runnable() {
public void run(){
hideYourActionBar();
}
});
} else {
wasTouched = false;
}
}
}, 0, YourDelayInMsHere);
在onTouchListener中,將wasTouched設置為true:
public boolean onTouch(View v, MotionEvent event) {
wasTouched = true;
}
這至少應該讓你知道如何做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.