導航:首頁 > 操作系統 > 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攔截點擊事件相關的資料

熱點內容
淮南程序員接私活項目 瀏覽:480
怎樣加密自己的密碼 瀏覽:521
安卓怎麼關許可權保護隱私 瀏覽:390
海牛微視app怎麼用 瀏覽:70
單片機怎樣選變壓器 瀏覽:829
癌症pdf 瀏覽:725
雲伺服器鏡像批量部署環境 瀏覽:683
安卓手機瀏覽器能訪問什麼網站 瀏覽:254
找不到網站的伺服器ip地址該如何解決 瀏覽:743
演算法十個數降序排列 瀏覽:95
基於單片機的老年人健康監測系統 瀏覽:706
python入門經典pdf下載 瀏覽:17
東芝變頻2p空調壓縮機 瀏覽:227
自家wifi怎麼能加密 瀏覽:644
紅米k40加密門禁卡 瀏覽:847
什麼樣的源碼好看 瀏覽:156
手機主伺服器有什麼用 瀏覽:612
程序編寫命令 瀏覽:597
android發送心跳包 瀏覽:385
指標源碼和原理 瀏覽:700