編輯:關於android開發
我們通常在ListView或者GridView響應點擊Item事件,但很多時候我們同樣也
希望監聽到點擊空白區域的事件來做更多的處理。本文以GridView為例給出一個實現
的方法,擴展GridView並可作為通用控件使用。ListView的實現應該也大同小異
好吧,原來之前寫過另外一篇,不過監控的是ACTION_UP事件,但這篇更加通用
代碼比較簡單,先貼代碼再做下解釋
public class MyGridView extends GridView { public interface OnTouchInvalidPositionListener { /** * motionEvent 可使用 MotionEvent.ACTION_DOWN 或者 MotionEvent.ACTION_UP等來按需要進行判斷 * @return 是否要終止事件的路由 */ boolean onTouchInvalidPosition(int motionEvent); } /** * 點擊空白區域時的響應和處理接口 */ public void setOnTouchInvalidPositionListener(OnTouchInvalidPositionListener listener) { mTouchInvalidPosListener = listener; } @Override public boolean onTouchEvent(MotionEvent event) { if(mTouchInvalidPosListener == null) { return super.onTouchEvent(event); } if (!isEnabled()) { // A disabled view that is clickable still consumes the touch // events, it just doesn't respond to them. return isClickable() || isLongClickable(); } final int motionPosition = pointToPosition((int)event.getX(), (int)event.getY()); if( motionPosition == INVALID_POSITION ) { super.onTouchEvent(event); return mTouchInvalidPosListener.onTouchInvalidPosition(event.getActionMasked()); } return super.onTouchEvent(event); } }
主要是重載了觸摸處理函數,並利用api pointToPosition取得當前點擊的item,當你點擊空白區域的時候,
會返回INVALID_POSITION,由此便可判斷點擊了空白區域。
使用的話如下代碼所示。在onTouchInvalidPosition事件中你可以做自己的響應操作,
通常用得比較多的是“點擊空白地方取消當前操作”。這裡我是用來實現點擊空白地方讓父容器
顯示觸摸變色效果。 注意return返回值的意義,當返回false的時候代表交由父級控件處理,這裡的
效果通常會讓外層的Layout顯示被點擊效果。當return true的時候表示你已經處理了該事件並不
讓該事件再往上傳遞。
mGridView.setOnTouchInvalidPositionListener(new OnTouchInvalidPositionListener() { @Override public boolean onTouchInvalidPosition(int motionEvent) { return false; //不終止路由事件讓父級控件處理事件 } });
效果圖如下,點擊紅色圈的地方整個Layout會變色,當然變色這個你的Layout得先設置對應的drawable。
路由事件是所有GUI框架的一套基本並且重要的機制,後續我會專門寫一篇文章來談論下
安卓上的路由機制。
MSM8909+Android5.1.1鍵盤驅動淺析 MSM8909+Android5.1.1鍵盤驅動------概述 采用SN7326帶智能指掃描的鍵
Android之Activity系列總結(一)--Activity概覽,android--activityActivity 本文內容 啟動 Activity 結
安卓--selector簡單使用,安卓--selectorselector ---選擇器 在App的使用中經常能看到selector的身影 如:一個按鍵看上去白色或者其它
Android---閃頻頁和倒計時,android---倒計時android閃頻的實現非常簡單,使用Handler對象的postDelayed()方法就可以實現。在這個方