當前位置:首頁 » 安卓系統 » android雙擊單擊

android雙擊單擊

發布時間: 2023-02-26 02:22:27

❶ android手機有哪些手勢操作,能具體點嗎

android手機有哪些手勢操作:

  1. 「點擊」,也叫「單擊」,即輕觸屏幕一下。無論是搭載何種操作系統的觸控手機,這個都是出現頻率最高的動作。點擊主要用來打開程序,還有功能表(抽屜)。

  2. 「點住」,也叫「長按」、「按住」,按住屏幕超過兩秒。此動作通常用來調出「菜單」。某些應用程序在界面空白處長按可以調出菜單;某些條目長按也可以彈出菜單,比如當您需要轉發簡訊時,在簡訊對話界面長按簡訊內容,必然會彈出菜單,菜單中通常會有「轉發」選項。

    在進行文字編輯時,點住文字部分,然後調出遊標進行精準定位。

    當然,此動作也可用於多選、快捷視圖,比如在「圖庫(相冊)」中,默認視圖下,長按相冊文件夾、可對文件夾進行多選操作;打開相冊文件夾後,長按照片,同樣可對照片進行多選操作,選擇完畢後可進行批量操作(發送、刪除)。

  3. 「拖動」,准確來說應該叫做「按住並拖動」。「拖動」主屏幕編輯時的常見動作,比如對桌面「小組件」或者「圖標」進行位置編輯時。另外也用於進度定位,比如播放音樂或者視頻時,需要常常拖動進度條。

  4. 「雙擊」就是短時間內連續雙擊屏幕兩次,主要用於快速縮放,比如瀏覽圖片時雙擊可以快速放大,再次雙擊可以復位;瀏覽網頁時,對文章正文部分雙擊可使文字自適應屏幕,當然某些視頻播放器雙擊可切換至全屏模式。

  5. 滑動,也算是一個常見操作。主要用於查看屏幕無法完全顯示的頁面,功能類似滑鼠的滾輪。此操作主要用於查看圖片、網頁、純文本(簡訊、郵件、筆記)。

    某些視頻播放器還定義了特殊功能,比如亮度調節、快進快退,比如「MX Player」、「VPlayer」。

  6. 「縮放」動作,是查看圖片、網頁時最常見的操作,照相時也可使用縮放手勢來進行調焦。在MX Player中,甚至可以將視頻畫面進行縮放。

❷ android平板電腦中怎麼樣判斷是單擊還是雙擊

android平板電腦中是沒有雙擊選項的,原因如下:

  1. android平板電腦和電腦系統不同而且操作也是不同的,電腦打開軟體是需要雙擊軟體或者右鍵後單擊選擇打開。

  2. android平板電腦打開軟體只需要點擊一下就可以打開了,點擊軟體2次和點擊1次效果是一樣的,都是會打開軟體的。

❸ Android 雙擊單擊事件監聽手勢檢測GestureDetector原理及實現

app我們常用的手勢有很多的地方,比如右滑關閉界面等。手勢控制分為觸發動作(Touch Mechanics,用戶手指在屏幕上如何動作)和觸發行為(Touch Activities,界面上特定動作在特定情境下引發的結果)。這是因為同樣的觸發動作(如單次觸擊)在不同情境下可能會帶來不同的結果(如輕觸,取消,開啟/關閉指示),同樣單次觸發行為(如放大)可能是由多種觸發動作(如捏放,雙次觸擊,雙次觸擊拖拽等)實現。

    一般情況下,我們知道View類有個View.OnTouchListener內部介面,通過重寫他的onTouch(View v, MotionEvent event)方法,我們可以處理一些touch事件,但是這個方法太過簡單,如果需要處理一些復雜的手勢,用這個介面就會很麻煩(因為我們要自己根據用戶觸摸的軌跡去判斷是什麼手勢)。

    Android sdk給我們提供了GestureDetector類,通過這個類我們可以識別很多的手勢,主要是通過他的onTouchEvent(event)方法完成了不同手勢的識別。雖然他能識別手勢,但是不同的手勢要怎麼處理,應該是提供給程序員實現的。

一.GestureDetector簡介

1.組成

GestureDetector類用來識別觸摸屏的各種手勢,它包含了兩個介面和一個內部類:

介面:

OnGestureListener:用來監聽手勢事件(6種)。

OnDoubleTapListener:用來監聽雙擊事件。

內部類:

SimpleOnGestureListener:用來監聽所有的手勢。實際上它實現了上述兩個介面,不過方法體是空的,需要我們自己寫。我們可以繼承這個類,重寫裡面的方法進行手勢處理。

2.構造

GestureDetector gestureDetector = new GestureDetector(GestureDetector.OnGestureListener listener);

GestureDetector gestureDetector = new GestureDetector(Context context,GestureDetector.OnGestureListener listener);

GestureDetector gestureDetector = new GestureDetector(Context context,GestureDetector.SimpleOnGestureListener listener);

3.方法

(1)onTouchEvent(MotionEvent ev) 分析捕捉到的觸摸事件觸發相應的回調函數

(2)setIsLongpressEnabled(boolean isLongpressEnabled) 設置「長按」是否可用

(3)setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleTapListener) 設置雙擊監聽器

4.使用

流程:

首先,系統捕捉屏幕的觸摸事件(onTouchListener),這時還未涉及具體手勢,只是簡單地捕捉到觸摸。

接著,在onTouch()方法中調用GestureDetector的onTouchEvent()方法,將捕捉到的MotionEvent交給GestureDetector來處理

最後,還需要實現抽象方法。

可根據需要選擇:

重寫OnGestureListener並通過構造函數傳入gestureDetector

重寫OnDoubleTapListener並通過GestureDetector.setOnDoubleTapListener方法傳入gestureDetector

重寫SimpleOnGestureListener並通過構造函數傳入gestureDetector

實現:

註:不要注重我寫的類是什麼類,要注重實現方法自定義view和activity中都可以,根據需要繼承上面三種listener,傳入構造函數即可;

public class TestDemo{

Context context;

public TestDemo(Context context){

this.context = context;

}

private GestureDetectordetector;

private void initView(){

detector =new GestureDetector(context, new MySimple());

detector =new GestureDetector(context, new MyGesture());

detector =new GestureDetector(context, new MyDoubleTap());

setOnTouchListener((v, event) -> {

// 事件監聽交給手勢類來處理

detector.onTouchEvent(event);

return true;

});

}

//與上面二選一

@Override

public boolean onTouchEvent(MotionEvent event) {

return detector.onTouchEvent(event);

}

// 手勢監聽器類SimpleOnGestureListener

    private class MySimple extends GestureDetector.SimpleOnGestureListener {

        @Override

        public boolean onSingleTapUp(MotionEvent e) {//一次單獨的輕擊抬起操作,也就是輕擊一下屏幕,立刻抬起來,才會有這個觸發;如果除了Down以外還有其它操作,那就不再是Single操作了,所以也就不會觸發這個事件

            return super.onSingleTapUp(e);

        }

        @Override

        public void onLongPress(MotionEvent e) {//長按事件;

            super.onLongPress(e);

        }

        @Override

        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {//在屏幕上拖動事件,只要手指移動就會執行,無論是用手拖動view,或者是以拋的動作滾動,都會多次觸發,這個方法在ACTION_MOVE動作發生時就會觸發他不會執行MotionEvent.ACTION_UP,通常用來實現放大縮小和移動。

            return false;

        }

        @Override

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//滑動屏幕,用戶按下觸摸屏、快速移動後松開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發;是個甩的動作,這個甩的動作是在一個MotionEvent.ACTION_UP(手指抬起)發生時執行,通常用來實現翻頁效果

            return super.onFling(e1, e2, velocityX, velocityY);

        }

        @Override

        public void onShowPress(MotionEvent e) {//down事件發生而move或則up還沒發生前觸發該事件;

            super.onShowPress(e);

        }

        @Override

        public boolean onDown(MotionEvent e) {//down事件用戶按下屏幕

            return super.onDown(e);

        }

        @Override

        public boolean onDoubleTap(MotionEvent e) {//雙擊事件

            return super.onDoubleTap(e);

        }

        @Override

        public boolean onDoubleTapEvent(MotionEvent e) {//雙擊間隔中還發生其他的動作。通知DoubleTap手勢中的事件,包含down、up和move事件(這里指的是在雙擊之間發生的事件,例如在同一個地方雙擊會產生DoubleTap手勢,而在DoubleTap手勢裡面還會發生down和up事件,這兩個事件由該函數通知)

            return super.onDoubleTapEvent(e);

        }

        @Override

        public boolean onSingleTapConfirmed(MotionEvent e) {//單擊事件。用來判定該次點擊是SingleTap而不是DoubleTap,如果連續點擊兩次就是DoubleTap手勢,如果只點擊一次,系統等待一段時間後沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然後觸發SingleTapConfirmed事件。

            return super.onSingleTapConfirmed(e);

        }

    }

// 手勢監聽器類GestureListener

    private class MyGesture extends GestureDetector.OnGestureListener{

        @Override

        public boolean onDown(MotionEvent e) {//down事件用戶按下屏幕

            return false;

        }

        @Override

        public void onShowPress(MotionEvent e) {//down事件發生瞬間而move或則up還沒發生前觸發該事件;

        }

        @Override

        public boolean onSingleTapUp(MotionEvent e) {//一次單獨的輕擊抬起操作,也就是輕擊一下屏幕,立刻抬起來,才會有這個觸發;如果除了Down以外還有其它操作,那就不再是Single操作了,所以也就不會觸發這個事件;

            return super.onSingleTapUp(e);

        }

        @Override

        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {//在屏幕上拖動事件,只要手指移動就會執行,無論是用手拖動view,或者是以拋的動作滾動,都會多次觸發,這個方法在ACTION_MOVE動作發生時就會觸發他不會執行MotionEvent.ACTION_UP,通常用來實現放大縮小和移動。

            return false;

        }

        @Override

        public void onLongPress(MotionEvent e) {//長按事件,超過一定時長觸發該事件回調;

            super.onLongPress(e);

        }

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//滑動屏幕,用戶按下觸摸屏、快速移動後松開,由1個MotionEvent ACTION_DOWN, 多個ACTION_MOVE, 1個ACTION_UP觸發;是個甩的動作,這個甩的動作是在一個MotionEvent.ACTION_UP(手指抬起)發生時執行,通常用來實現翻頁效果

            return super.onFling(e1, e2, velocityX, velocityY);

        }

    }

// 手勢監聽器類SimpleOnGestureListener

    private class MyDoubleTap extends GestureDetector.OnDoubleTapListener {

        @Override

        public boolean onDoubleTap(MotionEvent e) {//雙擊事件

            return super.onDoubleTap(e);

        }

        @Override

        public boolean onDoubleTapEvent(MotionEvent e) {//雙擊間隔中還發生其他的動作。通知DoubleTap手勢中的事件,包含down、up和move事件(這里指的是在雙擊之間發生的事件,例如在同一個地方雙擊會產生DoubleTap手勢,而在DoubleTap手勢裡面還會發生down和up事件,這兩個事件由該函數通知)

            return super.onDoubleTapEvent(e);

        }

        @Override

        public boolean onSingleTapConfirmed(MotionEvent e) {//單擊事件。用來判定該次點擊是SingleTap而不是DoubleTap,如果連續點擊兩次就是DoubleTap手勢,如果只點擊一次,系統等待一段時間後沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然後觸發SingleTapConfirmed事件。

            return super.onSingleTapConfirmed(e);

        }

    }

}

關於onFling()和onScroll()的區別:

onFling()是甩,這個甩的動作是在一個MotionEvent.ACTION_UP(手指抬起)發生時執行,而onScroll(),只要手指移動就會執行。他不會執行MotionEvent.ACTION_UP。onFling通常用來實現翻頁效果,而onScroll通常用來實現放大縮小和移動。

關於onSingleTapConfirmed和onSingleTapUp的一點區別: OnGestureListener有這樣的一個方法onSingleTapUp,和onSingleTapConfirmed容易混淆。二者的區別是:onSingleTapUp,只要手抬起就會執行,而對於onSingleTapConfirmed來說,如果雙擊的話,則onSingleTapConfirmed不會執行

SimpleOnGestureListener是GestureDetector類的一個內部類,該類是static class,也就是說它實際上是一個外部類。可以在外部繼承這個類,重寫裡面的手勢處理方法。

1.OnDoubleTapListener是用來檢測滑鼠雙擊事件的

2.SimpleOnGestureListener實際上實現了OnGestureListener 和OnDoubleTapListener,所以它可以完成以上提到的所有手勢識別(9種)

熱點內容
linuxapacheyum安裝 發布:2025-05-16 01:30:31 瀏覽:475
大連賓利浴池wifi密碼是多少 發布:2025-05-16 01:25:36 瀏覽:172
緩存數據生產服務 發布:2025-05-16 01:08:58 瀏覽:584
普通電腦伺服器圖片 發布:2025-05-16 01:04:02 瀏覽:971
伺服器地址和埠如何區分 發布:2025-05-16 01:03:17 瀏覽:834
重新編目資料庫 發布:2025-05-16 00:54:34 瀏覽:514
android語音控制 發布:2025-05-16 00:53:50 瀏覽:266
win8windows無法訪問 發布:2025-05-16 00:37:53 瀏覽:894
八種排序演算法 發布:2025-05-16 00:37:17 瀏覽:56
左旋螺紋數控編程實例 發布:2025-05-16 00:11:49 瀏覽:10