事故場景:在一個scrollview中放置了一錄音按鈕申尼,用戶按住開始錄音,松開停止錄音垫桂,按住并移出按鈕放棄錄音师幕,代碼工作很正常。
但是伪货,需求發(fā)生變化们衙,允許用戶多次錄音,并將錄音內(nèi)容用類似微信的方式出現(xiàn)在按鈕上方碱呼,這很簡單蒙挑,很快就實現(xiàn)了,無非是調(diào)用scrollview的addView方法愚臀。
但是忆蚀,測試說有bug了,很驚奇姑裂,看到bug更驚奇馋袜,就是當錄音次數(shù)多到需要上滑scrollview才能點擊錄音按鈕的時候,按住并移除按鈕放棄錄音不被執(zhí)行
原因分析:當scrollview中的內(nèi)容并不多時(scrollview不需要滑動)舶斧,這個時候scrollview不中斷事件的分發(fā)欣鳖,但是當scrollview中的內(nèi)容多到需要滾動時,用戶按住按鈕并移除按鈕茴厉,scrollview認為用戶是在滑動scrollview所以移動事件就不再分發(fā)了泽台,但是按下事件還是分發(fā)的,所以我們需要在控件的按下事件中加上this.getParent().requestDisallowInterceptTouchEvent(true);矾缓,?請求父容器不要中斷TouchEvent的分發(fā)怀酷。