Android中的雙擊事件

一般來說Android用戶比較熟悉的按鈕交互方式有兩種:單擊與長按解滓。雙擊這個交互且不說合不合理,但需求來了總是要做的立由。關于這個交互,最先想到的是Android手機系統(tǒng)中序厉,連續(xù)點擊版本號6次可以打開開發(fā)者模式這一場景锐膜。這個場景比較簡單,只需要計數就好弛房,而我這里的需求道盏,同一個按鈕,單擊與雙擊會觸發(fā)不同的事件文捶。
出于職業(yè)嗅覺荷逞,首先考慮的是有沒有相關API可以調用,查閱了一下粹排,果然找到GestureDetector.OnDoubleTapListener這個接口正適合目前的需求种远。OnDoubleTapListener的間接子類叫SimpleOnGestureListener,我只需要重寫下按鈕的onTouch事件顽耳,在重寫方法里做事件分發(fā)即可坠敷,于是乎問題迎刃而解:

button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });

      GestureDetector gestureDetector = new GestureDetector(Activity.this, new GestureDetector.SimpleOnGestureListener() {

            /**
             * 發(fā)生確定的單擊時執(zhí)行
             * @param e
             * @return
             */
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e) {//單擊事件

                Toast.makeText(Activity.this,"這是單擊事件", Toast.LENGTH_SHORT).show();
                return super.onSingleTapConfirmed(e);
            }

            /**
             * 雙擊發(fā)生時的通知
             * @param e
             * @return
             */
            @Override
            public boolean onDoubleTap(MotionEvent e) {//雙擊事件
                Toast.makeText(Activity.this,"這是單擊事件",Toast.LENGTH_SHORT).show();
                return super.onDoubleTap(e);
            }

            /**
             * 雙擊手勢過程中發(fā)生的事件,包括按下射富、移動和抬起事件
             * @param e
             * @return
             */
            @Override
            public boolean onDoubleTapEvent(MotionEvent e) {
                return super.onDoubleTapEvent(e);
            }
        });

假如沒有這樣的API膝迎,我們要自己實現,可以怎么做呢胰耗。這里比較繞的地方就是單擊和雙擊事件都要照顧限次,但二者又有聯系和沖突,然后我想了個辦法柴灯,通過Hander發(fā)送不同的消息來標記兩個事件卖漫,兩次點擊之間如果小于某個時間差,就認為觸發(fā)雙擊事件弛槐,單擊事件消息的發(fā)送延遲略長于這個時間差懊亡,如果在這之間觸發(fā)了雙擊事件,就撤回單擊事件的消息發(fā)送乎串,這樣單擊就不會被執(zhí)行店枣,代碼如下速警。

public class MainActivity extends Activity {


    long mLastTime=0;
    long mCurTime=0;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    Toast.makeText(MainActivity.this,"這是單擊事件",Toast.LENGTH_LONG).show();
                    break;
                case 2:
                    Toast.makeText(MainActivity.this,"這是雙擊事件",Toast.LENGTH_LONG).show();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mLastTime=mCurTime;
                 mCurTime= System.currentTimeMillis();
                if(mCurTime-mLastTime<300){//雙擊事件
                    mCurTime =0;
                    mLastTime = 0;
                    handler.removeMessages(1);
                    handler.sendEmptyMessage(2);
                }else{//單擊事件
                    handler.sendEmptyMessageDelayed(1, 310);
                }
            }
        });
    }
}

跑起來也沒什么問題,很OK的樣子鸯两,不知道大家有沒有其他的好辦法闷旧,可以交流討論。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末钧唐,一起剝皮案震驚了整個濱河市忙灼,隨后出現的幾起案子,更是在濱河造成了極大的恐慌钝侠,老刑警劉巖该园,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異帅韧,居然都是意外死亡里初,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門忽舟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双妨,“玉大人,你說我怎么就攤上這事叮阅〉笃罚” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵浩姥,是天一觀的道長挑随。 經常有香客問我,道長及刻,這世上最難降的妖魔是什么镀裤? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮缴饭,結果婚禮上暑劝,老公的妹妹穿的比我還像新娘。我一直安慰自己颗搂,他們只是感情好担猛,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丢氢,像睡著了一般傅联。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疚察,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天蒸走,我揣著相機與錄音,去河邊找鬼貌嫡。 笑死比驻,一個胖子當著我的面吹牛该溯,可吹牛的內容都是我干的。 我是一名探鬼主播别惦,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼狈茉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掸掸?” 一聲冷哼從身側響起氯庆,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扰付,沒想到半個月后堤撵,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡羽莺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年粒督,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽翼。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖族跛,靈堂內的尸體忽然破棺而出闰挡,到底是詐尸還是另有隱情,我是刑警寧澤礁哄,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布长酗,位于F島的核電站,受9級特大地震影響桐绒,放射性物質發(fā)生泄漏夺脾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一茉继、第九天 我趴在偏房一處隱蔽的房頂上張望咧叭。 院中可真熱鬧,春花似錦烁竭、人聲如沸菲茬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婉弹。三九已至,卻和暖如春终吼,著一層夾襖步出監(jiān)牢的瞬間镀赌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工际跪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商佛,地道東北人喉钢。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像威彰,于是被迫代替她去往敵國和親出牧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • 好奇觸摸事件是如何從屏幕轉移到APP內的歇盼?困惑于Cell怎么突然不能點擊了舔痕?糾結于如何實現這個奇葩響應需求?亦或是...
    Lotheve閱讀 57,124評論 51 599
  • 在iOS開發(fā)中經常會涉及到觸摸事件豹缀。本想自己總結一下伯复,但是遇到了這篇文章,感覺總結的已經很到位邢笙,特此轉載啸如。作者:L...
    WQ_UESTC閱讀 6,010評論 4 26
  • 從我很小的時候妇汗,小到自己沒有具體概念的年紀帘不,我就總在想這個問題: 怎么死合適? 死了去哪里杨箭? 首先表明寞焙,本人很陽光...
    z張雨辰z閱讀 272評論 0 3
  • 從我接到錄取通知書的那一刻,即使意料之中互婿,但還是十分歡喜捣郊,它如同九月秋風吹走我身邊所有暑氣,我知道慈参,我們的故...
    木頭羊w閱讀 307評論 0 1