導航:首頁 > 操作系統 > android攔截點擊事件

android攔截點擊事件

發布時間:2023-03-16 18:51:24

『壹』 android中 使用AOP避免重復點擊事件

```javascript

```

``` javascript

//上次點擊的時間

private static Long sLastclick =0L;

//攔截所有兩次點擊時間間隔小於一秒的點擊事件

private static final Long FILTER_TIMEM =1000L;

//上次點擊事件View

private View lastView;

//---- add content -----

//是否過濾點擊 默兄掘昌認是

private boolean checkClick =true;

//---- add content -----

@Around("execution(* android.view.View.OnClickListener.onClick(..))")

public void onClickLitener(ProceedingJoinPoint proceedingJoinPoint)throws Throwable {

//大於指定時間

    if (System.currentTimeMillis() -sLastclick >羨扒=FILTER_TIMEM) {

        doClick(proceedingJoinPoint);

    }else {

    //---- update content -----  判斷是否需要過濾點擊

        //小於指定秒數 但是不是同一個view 可以點擊  或者不過濾點擊

        if (!checkClick ||lastView ==null ||lastView != (proceedingJoinPoint).getArgs()[0]) {

//---- update content -----  判斷是否需要過濾點擊

            doClick(proceedingJoinPoint);

        }else {

//大於指定秒數 且是同一個view

            LogUtils.e(TAG,"重復點擊,已過濾");

        }

    }

}

//執行原有的 onClick 方法

private void doClick(ProceedingJoinPoint joinPoint)throws Throwable {

//判斷 view 是否存在

    if (joinPoint.getArgs().length ==0) {

        joinPoint.proceed();

        return;

}

//記錄點擊的view

    lastView = (View) (joinPoint).getArgs()[0];

//---- add content -----

    //修改默認過濾點擊

    checkClick =true;

//---- add content -----

    //記錄點擊散粗事件

    sLastclick =System.currentTimeMillis();

//執行點擊事件

    try {

        joinPoint.proceed();

    }catch (Throwable throwable) {

        throwable.printStackTrace();

    }

}

@Before("execution(@包名.RepeatClick  * *(..))")

public void beforeEnableDoubleClcik(JoinPoint joinPoint)throws Throwable {

    checkClick =false;

}

```

『貳』 Android-View的事件分發及攔截-父控制項和子控制項都處理觸摸事件的方式

比如接著上篇 Android-View的事件分發及攔截機制簡單流程先體驗再研究(場景?疑問? 具體?待續...) ,小白現在要實現就是子View和父ViewGroup都響應點擊事件。

1. 單純的都只是響應down事件

這個就很簡單了 - 直接子View的**public boolean **onTouchEvent(MotionEvent event) 裡面直接返回false就行了。也就是子控制項響應了一次down後,接下來就交給父ViewGroup了.(子View就啥幾把也幹不了了);

2. 響應down和up事件,move啥的

我們知道子View如果onTouch裡面返回了true,那麼將會處理後續的move,up事件。而不再交給上層父ViewGroup。那父ViewGroup就沒辦法在Touch裡面處理,所以我們只能放到dispatchTouchEvent或者onInterceptTouchEvent中處理這個down,up等事件:

比如dispatchTouchEvent中:

這樣的情況就是父ViewGroup先執行點擊事件,然後子View再執行。 如果您螞掘罩需要父ViewGroup晚點,可以延時執行啥的。

如果此時,子View的dispatchTouchEvent返回true - 表示攔截,不繼續了

那麼子View的所有的事件都不會響應了。其實也就是散旁我悶鬧們的一個事件先傳遞,touch再處理的樹形圖:

網路上拔個圖來

簡單記錄下下而已,繼續加深理解...這是上一篇的續,還是上一篇....嘖嘖....後面是官方文檔分析來著...

『叄』 如何在Android應用里屏蔽滑鼠點擊事件

這個應該跟你的條碼槍有關吧 你試試 不讓edittext獲取焦點 或者 在觸屏事件加個攔截 我只是猜測!

『肆』 Android點擊事件和滑動沖突解決

對於一個根ViewGroup來說,發生點擊事件首先調用dispatchTouchEvent
如果這個ViewGroup的onIterceptTouchEvent返回true就表示它要攔截當前事件,接著這個ViewGroup的onTouchEvent就會被調用.如果onIterceptTouchEvent返回false,那麼就會繼續向下調用子View的dispatchTouchEvent方法,其實整體來說就是個責任鏈的模式,一層一層的進行分發,當某一層能處理的時候,事件消費結束,當任何一層都不處理的時候,事件返回到最上層。

當一個View需要處理事羨飢件的時候,如果它沒有設置onTouchListener,那麼直接調用onTouchEvent.如果設置了Listenter 那麼就要看Listener的onTouch方法返回值.為true就不調,為false就調onTouchEvent。onTouchListener中的onTouch方法每次都會先於view本身的onTouchEvent調用,且有優先消費權

View的默認實現會在onTouchEvent裡面把touch事件解析成Click之類的事件

點擊事件傳遞順序 Activity -> Window -> View

一旦一個元素攔截了某事件,那麼一個事件序列裡面後續的Move,Down事件都會交嫌清給它處理.並且它的onInterceptTouchEvent不會再調用

View的onTouchEvent默認都會消耗事件,除非它的clickable和longClickable都是false(不可點擊),但是enable屬性不會影響

外部調用一般是在外部的onInterceptTouchEvent的方法里,一般也是在move里判斷具體的滑動是否需要攔截,如果符合我們外部控制項的需求則返回true攔截,如果不符合則返回false不攔截,傳遞給子控制項。兩種方式其實原理都是一樣就是在move里去根據x和y的一個滑動距離來判斷具體將這次兄者返滑動事件交給誰去處理。

閱讀全文

與android攔截點擊事件相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:61
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1002
命令zpa 瀏覽:285
python編譯器小程序 瀏覽:944
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:591
安卓卸載組件應用怎麼安裝 瀏覽:912
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:432
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:399
夢幻端游長安地圖互通源碼 瀏覽:745
電腦本地文件如何上傳伺服器 瀏覽:312