2015-09-30 85 views
0

快速,可能很簡單,問題。我有一個視圖,其背景是動畫,在那段時間,我想禁止用戶與視圖交互。我的視圖是一個FrameLayout,我用onTouchEvent()捕獲觸摸事件。我試過的解決方案:如何禁用/重新啓用Android中的觸摸事件?

1)首先setOnTouchListener(null),然後setOnTouchListener(this)。問題是,我的視圖只調用onEventEvent(MotionEvent),而不是onTouch(View,MotionEvent),所以我無法通過事件泵。 2)首先setEnabled(false),然後setEnabled(true)。源代碼說:一個可點擊的禁用視圖仍然消耗觸摸事件,它只是不響應它們。問題是,MotionEvents仍然會通過onTouchEvent()傳遞。

3)requestDisallowInterceptTouchEvent(false),then(true)。這隻能處理來自父級的觸摸事件。

我工作的解決方案是使用布爾變量isAnimating,並檢查onTouchEvent()中的值。我寧願不這樣做,因爲它對我來說看起來很醜,我寧願使用API​​來代替它,而不是重新發明輪子,所以......任何人有任何想法?謝謝。

回答

0

嘗試: setFocusable()setFocusableInTouchMode()

+0

我會盡力的,謝謝。 編輯:沒有運氣,我仍然可以在動畫過程中觸摸並與視圖進行交互。 –

+2

你能否請[編輯]解釋爲什麼這段代碼回答這個問題?僅限代碼答案[阻止](http://meta.stackexchange.com/q/148272/274165),因爲他們沒有教導解決方案。 –

0

嘗試:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    //Check if event is on your view 
    if(event.getY()>view.getTop()&&event.getY()<view.getBottom()&&event.getX()>view.getLeft()&&event.getX()<view.getRight()){ 
     //event occured inside your view 

    } 
    //here return super or as your logic prefer 
    return super.onTouchEvent(event); 
} 
+0

我想你可能對我的問題有點困惑。我想知道是否有一種方法會禁用onTouchEvent()從基於android API提供的某種方法調用,如disallowTouchEvent()。 –

+0

你爲什麼不只是你的條件語句,其中規定已消耗事件 – subhash

+0

這是我裏面的onTouchEvent()內返回true,但我不喜歡它: 如果(isAnimating){ 還真 } –