2014-01-09 52 views
0

每當用戶點擊或點擊屏幕時,是否有一種聰明的方式來「做某件事」?我想知道他們點擊了哪個視圖,並且無需使用自定義視圖替換所有標準視圖。自動Android點擊/點擊跟蹤

基本上,我想在我的應用中添加點擊跟蹤來幫助進行分析。我們已經有了頁面跟蹤功能(通過爲每項活動使用共享超類),但是在某些情況下,頁面跟蹤還不夠,我們實際上想跟蹤點擊次數。

如何在每次用戶點擊屏幕上的視圖時執行一個功能?

回答

1

在每個活動,只是在onCreate末尾添加這個(這是特別容易,如果你所有的活動都是一個自定義活動的子類,因爲這樣你只需要一次寫):

getWindow().getDecorView().findViewById(android.R.id.content).setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent e) { 
     //handle your code here 
     return false;//don't absorb the touch. 
    } 
}); 

編輯

上面的代碼不允許容易識別其中的View s的感動。下面的代碼將會。請注意,如果View已註冊onTouch事件,則可能會中斷其他onTouchListener。如果沒有,這將工作得很好。它使用droidQuery庫來選擇層次結構中的所有視圖,並使用上面的代碼來處理觸摸而不吸收事件。最好的地方是在onCreate的末尾,每Activity

首先,選擇你想要的架構的最高級別。如果您的佈局的根視圖有一個id,那將是最好的事情:

$.with(this, R.id.root_id) 

如果沒有,要麼添加一個,或者選擇最上面的視圖(佈局上圖)。請注意,分析這可能提供了一定的成果,你並不需要:現在

$.with(this).selectAll() 

,在本次評選結束後,追加了以下內容:

.each(new Function() { 
    @Override 
    public void invoke($ d, Object... args) { 
     d.view(0).setOnTouchListener(new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent e) { 
       //do something with the clicked view, such as: 
       handleTouch(v, e); 
       return false;//don't absorb the touch. 
      } 
     }) 
    } 
}); 

然後有一個新方法:

private void handleTouch(View v, MotionEvent e) { 
    //handle the view touch. 
} 
+0

這是否會告訴我哪個視圖被點擊,或將'v'永遠是內容的看法?例如。如果我的活動有一堆視圖中的項目列表視圖,它會告訴我點擊了哪個項目? – emmby

+0

@emmby不,這不會給你已經點擊了其中的觀點,但你可以在屏幕上,他們獲得點擊的位置,並能確定其觀點手指下方鋪設。你能否在你的問題中澄清這是否是一項要求? – Phil

+0

澄清,謝謝 – emmby