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

來源:互聯網
上載者:User

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

安卓上的路由機制。

 

轉載請表明原文位置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.