Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android修行筆記(六): GridView點擊空白地方事件擴展,androidgridview

Android修行筆記(六): GridView點擊空白地方事件擴展,androidgridview

編輯:關於android開發

Android修行筆記(六): GridView點擊空白地方事件擴展,androidgridview


 

  我們通常在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框架的一套基本並且重要的機制,後續我會專門寫一篇文章來談論下

安卓上的路由機制。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved