0

我遇到一個奇怪的小問題,我onTouchEvent。當你觸摸屏幕的邊緣,它應該顯示操作欄(使用ActionbarSherlock,而不是機器人動作條),以及移動的按鈕"buttonClick"下來,以適應操作欄的高度。的Android onTouch必須以兩次觸發觸發actionBar.show()和按鈕位置變化

這工作,但只有當你觸摸兩次。在第一次觸摸時,操作欄顯示,並在第二次觸摸時,按鈕向下移動。我不知道爲什麼它沒有在第一觸摸期間都做,我搜索在這裏只打開了與它有沒有發射所有,或一對夫婦曾在onTouch是只有射擊兩次問題問題的人,從來沒有一次。

onTouchEvent()代碼如下,我會很感激,如果有人可以幫助我理解它爲什麼這樣做,讓。

public boolean onTouchEvent(MotionEvent event) { 
    int x = (int)event.getX(); 
    int y = (int)event.getY(); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      Log.v(TAG, "New Touch"); 
      Log.v(TAG, "Screen Width: "+ screen_width); 
      if (x >= (screen_width - 95)){ 
       int actionHeight = getSupportActionBar().getHeight(); 
       Log.v(TAG, ""+actionHeight); 
       thumbParams.setMargins(0,actionHeight,0,0); 
       thumbClick.setLayoutParams(thumbParams); 
       params.setMargins(0,actionHeight,0,0); 
        buttonClick.setLayoutParams(params); 
       getSupportActionBar().show(); 

      } 
     case MotionEvent.ACTION_MOVE: 
     case MotionEvent.ACTION_UP: 
    } 

return false; 
} 
+0

我不認爲這是一個觸摸事件處理程序的問題。由於您第一次看到顯示條而不是按鈕,請檢查您如何移動按鈕。很明顯,您的代碼在操作欄顯示後正在執行。 – neo 2013-05-13 15:45:03

+0

嗨,感謝您的評論!我通過調整粘貼的代碼中的邊距來移動按鈕。我將垂直邊距設置爲actionBar的高度,然後將按鈕的參數設置爲更新後的參數。我很困惑,因爲它*運行,它必須在它發生之前第二次被擊中。 我試圖把它放在顯示操作欄的代碼後面,以防它在隱藏的時候做了一些奇怪的事情,高度爲0.沒有任何區別。 – 2013-05-13 17:07:52

+0

觸摸之前是否有按鈕可見? – neo 2013-05-13 19:33:47

回答

1

這是造成這一切的具體問題是,對於getSupportActionBar().getHeight()值爲0在我試圖把它分配給邊緣點。我嘗試了一系列過於複雜的方法來解決這個問題,但最終我發現,除了getSupportActionBar().show();之外,我所做的只是把ACTION_UP這個案例全部移除。

可以有輕微的noticible滯後,如果他們離開自己的手指有太長時間,但大部分的時間似乎瞬間完成的,它現在可以在第一次點擊!我已經把我的調整後的代碼放在下面,以防我的解釋措辭不佳。

public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      int x = (int)event.getX(); 
      int y = (int)event.getY(); 
      if (x >= (screen_width - 95)){ 
       getSupportActionBar().show(); 
      } 
     case MotionEvent.ACTION_MOVE: 
     case MotionEvent.ACTION_UP: 
      actionHeight = getSupportActionBar().getHeight(); 
      Log.v(TAG, ""+actionHeight); 

      thumbParams.setMargins(0, actionHeight, 0, 0); 
      params.setMargins(0, actionHeight, 0, 0); 
      thumbClick.setLayoutParams(thumbParams); 
      buttonClick.setLayoutParams(params); 
    } 

return false; 
} 
+0

非常感謝,幫了我很多。 – Ethenyl 2013-08-26 09:09:33