擴大View點擊范圍

padding方式

適合圖片等dp或px為單位的view,
不適合textview、button這種以或含sp計算單位的view。

TouchDelegate方式

有時候美工提供給我們的圖標是很小的,但卻要在如此小的圖標上附加點擊事件,如果不做處理,用戶在使用的時候是很難點中的。當然,我們可以通過布局做調整處理,但是往往是布局變得更復雜?,F在我們通過TouchDelegate來擴大View點擊區域方式解決這個問題。

作用

假設有兩個View,分別是v1、v2,可以通過v1.setTouchDelegate(new TouchDelegate(bounds, v2))來委派觸摸事件,其中bounds是一個Rect。執行該這個方法后,v1中bounds區域的觸摸事件TouchEvent將會傳遞給v2。

代碼

    public static void setTouchDelegate(final View view, final int expandTouchWidth) {
        final View parentView = (View) view.getParent();
        parentView.post(new Runnable() {
            @Override
            public void run() {
                final Rect rect = new Rect();
                view.getHitRect(rect); // view構建完成后才能獲取,所以放在post中執行
                // 4個方向增加矩形區域
                rect.top -= expandTouchWidth;
                rect.bottom += expandTouchWidth;
                rect.left -= expandTouchWidth;
                rect.right += expandTouchWidth;

                parentView.setTouchDelegate(new TouchDelegate(rect, view));
            }
        });
    }

使用的時候只需在onCreate中或其他合適的地方調用setTouchDelegate(v2, 100),v2是要擴大點擊區域的view,100是v2四周要擴大的點擊區域px值。

注意點

  1. 必須保證parent足夠大,如果自定義的范圍超出parent的大小,則超出的那部分無效。
  2. 一個parent只能設置一個觸摸委派,設置多個時,只有最后設置的child有效。如果希望一個view能設置多個委派,需要再自定義parent

參考

利用TouchDelegate擴大View點擊區域
ListView Tips & Tricks #5: Enlarged Touchable Areas

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,335評論 25 708
  • 1、設置UILabel行間距 NSMutableAttributedString* attrString = [[...
    十年一品溫如言1008閱讀 1,719評論 0 3
  • 轉自:http://www.code4app.com/blog-866962-1317.html1、設置UILab...
    MMOTE閱讀 1,671評論 1 1
  • 記得以前有段時間網上很流行一段話―― 同學讀書我讀書,同學工作我讀書,同學結婚我還在讀書,同學生娃了我還是在讀書…...
    倒立的兔子閱讀 362評論 2 2
  • 它乘著我的,美好的愿望 以及,青澀的過往 它飛去了,藍澈的天上 它告別那 相識的欣喜,和動情的期望 當陽光,融化了...
    愛讀書的喵123閱讀 255評論 0 2