2011-12-09 50 views
1

我在觸摸屏幕時使用了OnTouchListener來顯示layout1。 現在我想要無形佈局1,而屏幕沒有觸摸三秒鐘。 但我不知道我可以使用哪個事件監聽器?如何在用戶未觸摸屏幕時隱藏佈局?

現在問題已解決。 但另一個出現。 我使用:

class unTouchTask extends TimerTask { 
public void run() { 
if(untouch == true) { 
RelativeLayout rl = (
RelativeLayout)findViewById(R.id.relativeLayout2); 
rl.setVisibility(View.INVISIBLE); 
timer.cancel(); 
untouch = false;} 
} 
    } 

下面的錯誤就行rl.setVisibility(View.INVISIBLE);

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

回答

1

選項1:您需要運行一個定時器來跟蹤用戶停用的非活動時間,並且在每次用戶觸摸時您都需要重置定時器。

代碼的計時器如下:

class UpdateTimeTask extends TimerTask { 
    public void run() { 

     //hide your layout 

    } 

} 

而且在事件監聽器來啓動此更新,下面的定時器()實例用於:

if(startTime == 0L) { 
    startTime = evt.getWhen(); 
    timer = new Timer(); 
    timer.schedule(new UpdateTimeTask(), 300, 200); 
} 

注:特別要注意的300個,200個參數。第一個參數表示在第一次運行時鐘更新任務之前等待300毫秒。第二種方法在此後每200毫秒重複一次,直到停止。

選項2:幸運的是,計時器的作用可以通過android.os.Handler類取代,一些調整

您可以在http://www.vogella.de/articles/AndroidPerformance/article.html

祺獲得更詳細的例子。

1

您可以使用Timer和TimerTask調度東西的時間間隔發生。 如果用戶觸摸屏幕,請取消定時器並重置。您需要在UI線程中使用UI相關的東西。這article會給你一個想法。

1

你會得到這個錯誤,因爲你可以使用線程,但所有的視圖和所有視圖相關的API,必須從主線程(也稱爲UI線程)調用。所以解決方案是使用Handler 。 Handler是一個將消息發佈回UI線程的對象。 http://developer.android.com/reference/android/os/Handler.html將引導你到代碼處理程序。

第二個選項是使用runOnUiThread。以下是我在我的帖子中所做的:

runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.VISIBLE); 
    } 
}); 
//long operation here 
runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.INVISIBLE); 
    } 
}); 
相關問題