1. 程式人生 > >Android-防止使用者快速點選和多控制元件點選

Android-防止使用者快速點選和多控制元件點選

原地址簡書:http://www.jianshu.com/p/9d7df1895b72

1.為什麼要防止使用者重複點選

在使用者使用App的時候,並不會乖乖的按照我們的想法而執行。

下面就拿我們熟悉的Button來:


舉個栗子

假設這個Button的點選事件是“一個登入的網路請求”,這時候我們的主角-老司機小明登場了,他嫻熟的輸入了自己的賬號和密碼,然後點選了登入,靜靜地等候著APP的反饋跳轉,可是天有不測風雲,這時候網路不是很好,APP一直還未反饋 。我們的老司機也是一個暴脾氣,抓著APP的那個小Button一頓亂點。欺負完Button以後,網路好了,然後無數個網路請求被髮出去了,瞬間爆炸(當然你也可以優化網路請求,這裡只是舉個類似的例子)。

2.如何防止重複點選

方法1.遮蔽Button的點選事件

步驟一:在Button的點選事件裡面

btn.setClickable(false);//設定button不可以點選

步驟二:在網路請求完成的時候(請求獲得資料或者請求失敗,請求取消等操作)

btn.setClickable(true);//設定button可以點選

方法2.新增標誌位判斷是否執行Button內的標誌位

原理:每次點選button的時候,獲取當前的時間,然後對比上一次的時間,兩者的差值如果小於某個規定的時間,則判斷為快速點選。

public class NoFastClickUtils {

               private  static long lastClickTime=0;//上次點選的時間

               private  static int spaceTime = 1000;//時間間隔

               public  static boolean isFastClick() {

                           long currentTime = System.currentTimeMillis();//當前系統時間

                           boolean isAllowClick;//是否允許點選

                          if (currentTime - lastClickTime > spaceTime) {

                                      isAllowClick= false;

                           } else {

                                      isAllowClick = true;

                             }

                          lastClickTime = currentTime;

                          return isAllowClick;

    }

}

使用方法:

在Button的點選事件裡面加入如下程式碼:

if(NoFastClickUtils.isDoubleClick()) {

//快速點選後的邏輯,可以提示使用者點選太快,休息一會

}else{

//正常點選的邏輯

}

3.為什麼需要防止多點觸控

在預設情況下,Android是支援多點觸控的。


累了換個姿勢再舉個粒子

有一個介面A,A中含有2個Button。

我們這裡稱介面A為A女神,Button1為備胎小明,Button2為備胎小東。

A女神嘛肯定有很多備胎的聯絡方式,週末了A女神想找個備胎吃飯,資訊已經編好了(內容自行腦補),她在思考是找小明還是小東呢?這是個值得深思的問題。想著想著,手一不小心同時點選了小明和小東。這一下矇蔽了,A女神的尷尬癌都犯了。這時候“防止多點觸控”同學為了幫助A女神解決問題,成為她廣大備胎隊伍中的一員勇敢的站了出來。

4.如何防止多點觸控

其實很簡單在2個Button的父佈局中加入:

android:splitMotionEvents=”false”//不支援多點觸控事件

就是這麼簡單,你就可以接近A女神。

還找到另一種方式:

<style name="MyStyle">

      <item name="android:windowEnableSplitTouch">false</item>

      <item name="android:splitMotionEvents>false</item>

</style>

這種方式就相當於全域性設定了,可是有時候我們還是需要多點觸控的,比如檢視一張圖片,我們需要放大看。

參考地址: