Android對螢幕空白區域的監聽方法:
阿新 • • 發佈:2019-02-18
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction()==MotionEvent.ACTION_DOWN){ View view = getCurrentFocus(); if(view!=iv1){ iv1.setVisibility(View.INVISIBLE); } } return super.dispatchTouchEvent(ev); }
當點選圖片以外的地方圖片會自動隱藏;實現對圖片以外的地方的監聽!!!!!
注意:當返回值為TRUE時,直接中斷了事件向下傳遞的過程,無論點選螢幕哪兒,都會執行方法裡的類容!!!!
實測上面的方法不管用,getCurrentFocus();返回的空間都是空的,下面進行第二種方式:
@Override public boolean onTouchEvent(MotionEvent event) { View view = getCurrentFocus(); Log.i("tAG==================",(view==null)+""); iv1.setVisibility(View.INVISIBLE); return true; }
activity中所有的控制元件只要沒有設定clickable屬性的都不會呼叫onTouchEvent()方法,然後事件被一層層返回,最後當然事件被系統消費了,一樣會走onTouchEvent()。
那麼,設定了clickable屬性的會怎麼樣呢,我們知道button類的控制元件天生就是大娘生的,自帶clickable屬性。當activity中有這些控制元件時,點選它們時onTouchEvent()方法不會被呼叫,當然他就會走onclick或onLongClick的監聽事件了。這樣我們想要的效果就有了!
當點選螢幕的空白區域時,重寫onTouchEvent(),返回true,強制消費!當點選某個控制元件時,設定clickable屬性,再來個監聽事件,OK!
很疑惑的一點:
view的onClick方法是在ACTION_UP之後執行,記住一點就可以了那就是如果onTouch方法返回true,說明View這次消費了這次事件,所以就不會再執行後續的onClick方法了,