那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android手勢(shì)檢測(cè)之GestureDetector全面分析

哆啦安全 ? 來(lái)源:Android開(kāi)發(fā)編程 ? 2023-04-19 14:43 ? 次閱讀

前言

當(dāng)用戶(hù)觸摸屏幕的時(shí)候,會(huì)產(chǎn)生許多手勢(shì),例如down,up,scroll,filing等等;

Android sdk給我們提供了GestureDetector類(lèi),通過(guò)這個(gè)類(lèi)我們可以識(shí)別很多的手勢(shì);

今天就來(lái)學(xué)習(xí)下;

一、GestureDetector介紹

GestureDetector這個(gè)類(lèi)對(duì)外提供了兩個(gè)接口和一個(gè)外部類(lèi)

接口:OnGestureListener,OnDoubleTapListener

內(nèi)部類(lèi):SimpleOnGestureListener

89c9d15a-de7b-11ed-bfe3-dac502259ad0.png

GestureDetector類(lèi)介紹

private class Gesturelistener implements GestureDetector.OnGestureListener{
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// TODO Auto-generated method stub
return false;
}
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
}

這里總共重寫(xiě)了六個(gè)函數(shù)

1、OnDown(MotionEvent e):用戶(hù)按下屏幕就會(huì)觸發(fā);

2、onShowPress(MotionEvent e):如果是按下的時(shí)間超過(guò)瞬間,而且在按下的時(shí)候沒(méi)有松開(kāi)或者是拖動(dòng)的,那么onShowPress就會(huì)執(zhí)行

3、onLongPress(MotionEvent e):長(zhǎng)按觸摸屏,超過(guò)一定時(shí)長(zhǎng),就會(huì)觸發(fā)這個(gè)事件,觸發(fā)順序:onDown->onShowPress->onLongPress

4、onSingleTapUp(MotionEvent e):一次單獨(dú)的輕擊抬起操作,也就是輕擊一下屏幕,立刻抬起來(lái),才會(huì)有這個(gè)觸發(fā),當(dāng)然,如果除了Down以外還有其它操作,那就不再算是Single操作了,所以也就不會(huì)觸發(fā)這個(gè)事件;觸發(fā)順序:Touchup:onDown->onSingleTapUp->onSingleTapConfirmed ;

onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) :滑屏,用戶(hù)按下觸摸屏、快速移動(dòng)后松開(kāi),由1個(gè)MotionEvent ACTION_DOWN, 多個(gè)ACTION_MOVE, 1個(gè)ACTION_UP觸發(fā);

參數(shù)解釋?zhuān)?/p>

e1:第1個(gè)ACTION_DOWN MotionEvent

e2:最后一個(gè)ACTION_MOVE MotionEvent

velocityX:X軸上的移動(dòng)速度,像素/秒

velocityY:Y軸上的移動(dòng)速度,像素/秒

5、onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY):在屏幕上拖動(dòng)事件;無(wú)論是用手拖動(dòng)view,或者是以?huà)伒膭?dòng)作滾動(dòng),都會(huì)多次觸發(fā),這個(gè)方法在ACTION_MOVE動(dòng)作發(fā)生時(shí)就會(huì)觸發(fā);

滑屏:手指觸動(dòng)屏幕后,稍微滑動(dòng)后立即松開(kāi)

onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling

拖動(dòng)

onDown------》onScroll----》onScroll------》onFiling

無(wú)論是滑屏,還是拖動(dòng),影響的只是中間OnScroll觸發(fā)的數(shù)量多少而已,最終都會(huì)觸發(fā)onFling事件;

二、實(shí)現(xiàn)GestureDetector

1、實(shí)現(xiàn)OnGestureListener接口中的方法(可以使用匿名內(nèi)部類(lèi)或?qū)崿F(xiàn)了接口的類(lèi)實(shí)例);

class MyGestureListener implements GestureDetector.OnGestureListener {
    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }
    @Override
    public void onShowPress(MotionEvent e) {
    }
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }
    @Override
    public void onLongPress(MotionEvent e) {
    }
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        return false;
    }
}

2、創(chuàng)建GestureDetector類(lèi)的實(shí)例,構(gòu)造函數(shù)如下:

public GestureDetector(OnGestureListener listener, Handler handler) {
    this(null, listener, handler);
}
public GestureDetector(OnGestureListener listener) {
    this(null, listener, null);
}
public GestureDetector(Context context, OnGestureListener listener) {
    this(context, listener, null);
}
public GestureDetector(Context context, OnGestureListener listener, Handler handler) {
}
public GestureDetector(Context context, OnGestureListener listener, Handler handler,
        boolean unused) {
    this(context, listener, handler);
}
mGestureDetector = new GestureDetector(mContext,new MyGestureListener());

3、 實(shí)現(xiàn)View.OnTouchListener接口,重寫(xiě)onTouch()方法

4、在onTouch()方法中攔截事件處理,將控制權(quán)交給GestureDector;

@Override
public boolean onTouch(View v, MotionEvent event) {
    return mGestureDetector.onTouchEvent(event);
}

5、調(diào)用控件的View.setOnTouchListener()將接口的具體實(shí)現(xiàn)的引用傳遞進(jìn)去或者如果是監(jiān)聽(tīng)雙擊的話(huà)調(diào)用GestureDetector .setOnDoubleTapListener()

super.setOnTouchListener(this);

mGestureDetector.setOnDoubleTapListener(new MyGestureListener());

package com.test.test;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/*
 * 
 */
public class MyView extends View implements View.OnTouchListener{
    private Context mContext;
    private GestureDetector mGestureDetector;
    private static final String TAG = "MyView";
    public MyView(Context context) {
        super(context);
        initData(context);
    }
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initData(context);
    }
    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initData(context);
    }
    private void initData(Context context) {
        this.mContext = context;
        super.setOnTouchListener(this);
        super.setClickable(true);
        super.setLongClickable(true);
        super.setFocusable(true);
        mGestureDetector = new GestureDetector(mContext,new MyGestureListener());
        mGestureDetector.setOnDoubleTapListener(new MyGestureListener());
    }
    /*
     * 當(dāng)該view上的事件被分發(fā)到view上時(shí)觸發(fā)該方法的回調(diào)
     * 如果這個(gè)方法返回false時(shí),該事件就會(huì)被傳遞給Activity中的onTouchEvent方法來(lái)處理
     * 如果該方法返回true時(shí),表示該事件已經(jīng)被onTouch函數(shù)處理玩,不會(huì)上傳到activity中處理
     * 該方法屬于View.OnTouchListening接口
     */
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }
    /*
     * 手勢(shì)監(jiān)聽(tīng)類(lèi)
     */
    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
        public MyGestureListener() {
            super();
        }
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.e(TAG, "onDoubleTap");
            return true;
        }
        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            Log.e(TAG, "onDoubleTapEvent");
            return true;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.e(TAG, "onSingleTapConfirmed");
            return true;
        }
        @Override
        public boolean onContextClick(MotionEvent e) {
            Log.e(TAG, "onContextClick");
            return true;
        }
        @Override
        public boolean onDown(MotionEvent e) {
            Log.e(TAG, "onDown");
            return true;
        }
        @Override
        public void onShowPress(MotionEvent e) {
            Log.e(TAG, "onShowPress");
        }
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.e(TAG, "onSingleTapUp");
            return true;
        }
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.e(TAG, "onScroll");
            return true;
        }
        @Override
        public void onLongPress(MotionEvent e) {
            Log.e(TAG, "onLongPress");
        }
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            Log.e(TAG, "onFling");
            return true;
        }
    }
}

自定義控件繼承了View實(shí)現(xiàn)了View.OnTouchListener。監(jiān)聽(tīng)的方法用的是繼承SimpleOnGestureListener類(lèi),重寫(xiě)了所有方法。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3945

    瀏覽量

    127941
  • 觸摸屏
    +關(guān)注

    關(guān)注

    42

    文章

    2317

    瀏覽量

    116768

原文標(biāo)題:Android手勢(shì)檢測(cè)-GestureDetector全面分析

文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Android系統(tǒng)開(kāi)發(fā)藍(lán)牙開(kāi)發(fā)案例分析

    主題:Android系統(tǒng)開(kāi)發(fā)藍(lán)牙設(shè)備訪(fǎng)問(wèn)技術(shù)要點(diǎn)分析及經(jīng)典案例課程內(nèi)容:本專(zhuān)題圍繞Android中藍(lán)牙技術(shù)及設(shè)備訪(fǎng)問(wèn)要點(diǎn)進(jìn)行介紹,為您解決藍(lán)牙開(kāi)發(fā)過(guò)程中經(jīng)常遇到的問(wèn)題,最后以“智能醫(yī)
    發(fā)表于 07-24 16:32

    Android 手勢(shì)識(shí)別

    本帖最后由 kiter_rp 于 2014-9-11 14:23 編輯 總體來(lái)分析手勢(shì)有關(guān)涉及到手勢(shì)匹配相關(guān)的源碼類(lèi)之間的關(guān)系,如下圖: 上圖中的相關(guān)類(lèi)簡(jiǎn)介:GestureLibrary:
    發(fā)表于 09-11 14:22

    干貨!Android藍(lán)牙驅(qū)動(dòng)開(kāi)發(fā)經(jīng)驗(yàn)

    Bluetooth協(xié)議棧分析43.1 藍(lán)牙協(xié)議棧43.2 Android與藍(lán)牙協(xié)議棧的關(guān)系5四 BluetoothHCI層分析54.1 HCI層與基帶的通信方式64.2 包的
    發(fā)表于 02-29 15:53

    Androidwifi分析(上)

    Androidwifi分析(上)
    發(fā)表于 11-02 10:53

    谷歌為Android 2.0操作系統(tǒng)研發(fā)出"手勢(shì)

    谷歌為Android 2.0操作系統(tǒng)研發(fā)出"手勢(shì)搜索" 3月5日消息,據(jù)國(guó)外媒體報(bào)道,谷歌公司已經(jīng)為Android 2.0操作系統(tǒng)研發(fā)出新的搜索工具:“手勢(shì)搜索(Gesture Se
    發(fā)表于 03-05 09:04 ?558次閱讀

    用戶(hù)手勢(shì)檢測(cè)-GestureDetector使用詳解

    安卓APP開(kāi)發(fā)中的部分功能實(shí)現(xiàn)代碼:用戶(hù)手勢(shì)檢測(cè)-GestureDetector使用詳解
    發(fā)表于 03-03 16:16 ?2次下載

    動(dòng)態(tài)手勢(shì)檢測(cè)與分類(lèi)

    提出一種對(duì)視頻流中的連續(xù)手勢(shì)進(jìn)行檢測(cè)和分類(lèi)的方法.檢測(cè)的目的是找到這些手勢(shì)的開(kāi)始幀和結(jié)束幀.提出的融合音頻和視覺(jué)信息的檢測(cè)方法確保了
    發(fā)表于 01-03 15:23 ?0次下載

    基于Android安全總結(jié)與分析

    Android智能手機(jī)的日益流行也吸引了黑客,導(dǎo)致Android惡意軟件應(yīng)用的大量增加,從Android體系結(jié)構(gòu)、設(shè)計(jì)原則、安全機(jī)制、主要威脅、惡意軟件分類(lèi)與檢測(cè)、靜態(tài)
    發(fā)表于 01-18 16:58 ?3次下載

    Android內(nèi)核鉤子檢測(cè)技術(shù)

    針對(duì)Android平臺(tái)上內(nèi)核級(jí)鉤子檢測(cè)的研究,提出了一種結(jié)合基于特征模式的靜態(tài)檢測(cè)技術(shù)和基于行為分析的動(dòng)態(tài)檢測(cè)技術(shù)的
    發(fā)表于 01-26 18:01 ?1次下載
    <b class='flag-5'>Android</b>內(nèi)核鉤子<b class='flag-5'>檢測(cè)</b>技術(shù)

    目前較為主流的手勢(shì)檢測(cè)方案簡(jiǎn)要分析

    ELMOS推出的汽車(chē)級(jí)多用途傳感器IC-E909.06,同樣可以實(shí)現(xiàn)手勢(shì)檢測(cè)。E909.06基于目標(biāo)檢測(cè)光學(xué)技術(shù),能夠?qū)ξ矬w移動(dòng)進(jìn)行非機(jī)械檢測(cè);基于HALIOS(High Ambien
    的頭像 發(fā)表于 05-24 15:42 ?1.5w次閱讀

    AndroidQ或?qū)⒓尤胂蚝蠡瑒?dòng)手勢(shì)

    谷歌在Android 9 Pie上首次引入手勢(shì)控制時(shí),許多的用戶(hù)覺(jué)得這些手勢(shì)控制還不成熟。用戶(hù)只能單一的方向上切換應(yīng)用,而且任務(wù)之間的過(guò)濾動(dòng)畫(huà)銜接的不流暢。幸運(yùn)的是,在Android
    的頭像 發(fā)表于 04-24 11:27 ?2413次閱讀

    谷歌分享關(guān)于下一代Android系統(tǒng)AndroidQ的更多細(xì)節(jié)

    怎么樣,這樣的操作邏輯是不是有了種似曾相識(shí)的感覺(jué)?此外,屏幕下方的小白條也充當(dāng)多任務(wù)切換手勢(shì),左右滑動(dòng)可切換在后臺(tái)運(yùn)行的所有程序。全面手勢(shì)的加入,會(huì)使得現(xiàn)在的全面屏手機(jī)得到更多的顯示
    的頭像 發(fā)表于 05-13 16:13 ?3100次閱讀

    Android還是沒(méi)找到比iOS更好用的手勢(shì)操作

    近期,Google 推送了 Android Q Beta 3 測(cè)試版系統(tǒng)更新,在這個(gè)版本中,用戶(hù)可以用上和 iOS 一模一樣的手勢(shì)交互。
    的頭像 發(fā)表于 05-20 14:45 ?2570次閱讀

    消息稱(chēng)Android 12有望重新引入雙擊背面手勢(shì)

    雙擊背面手勢(shì)已經(jīng)在很多手機(jī)系統(tǒng)中搭載了,包括蘋(píng)果最新的 iOS 14、小米的 MIUI 12 等。 谷歌也曾在 Android 11 預(yù)覽版中加入了雙擊背面手勢(shì)功能,該功能代號(hào)為 “Columbus
    的頭像 發(fā)表于 01-25 09:13 ?1335次閱讀

    車(chē)載手勢(shì)識(shí)別技術(shù)的原理及其應(yīng)用

    車(chē)載手勢(shì)識(shí)別技術(shù)是一種利用計(jì)算機(jī)視覺(jué)和人工智能技術(shù)來(lái)識(shí)別和理解駕駛員手勢(shì)的技術(shù)。該技術(shù)通過(guò)使用傳感器、攝像頭等設(shè)備捕捉駕駛員的手勢(shì)動(dòng)作,然后通過(guò)算法對(duì)捕捉到的手勢(shì)動(dòng)作進(jìn)行識(shí)別和
    的頭像 發(fā)表于 06-27 18:09 ?1438次閱讀
    澳门百家乐官方网站破解百家乐技巧 | 百家乐套利| 百家乐官网赢钱| 大发888bet亚洲lm0| 皇冠网百家乐官网啊| 平远县| 百家乐创立几年了| 蓝盾百家乐官网赌场娱乐网规则 | 百家乐官网稳赚的方法| 免费百家乐计划工具| 红树林百家乐官网的玩法技巧和规则 | 闲和庄百家乐官网娱乐场| 永利高| 澳门百家乐如何算| 试玩百家乐官网代理| 西和县| 正品百家乐玩法| 百家乐官网桌布无纺布| 闵行区| 大发888娱乐场下载com| 网络百家乐最安全| 娱乐场百家乐官网大都| 大发888 护栏| 百家乐剁手| 百家乐官网强弱走势图| 茶陵县| 大发888xp缺少 casino| 真人百家乐好不好玩| 百家乐官网赌博破解| 澳门赌博网站| 百家乐斗地主炸金花| 兰桂坊百家乐官网的玩法技巧和规则 | 网上赌百家乐官网正规吗| bet365 app| 大玩家百家乐的玩法技巧和规则| 澳门百家乐官网怎么下载| 百家乐官网最常见的路子| 圣保罗百家乐的玩法技巧和规则| 百家乐的打法技巧| 百家乐官网电子发牌盒| 百家乐官网作弊演示|