日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 當用戶觸摸屏幕的時候,會產(chǎn)生許多手勢,例如down,up,scroll,filing等等。一般情況下,我們知道View類有個View.OnTouchListener內(nèi)部接口,通過重寫他的onTouch(View v,

 當用戶觸摸屏幕的時候,會產(chǎn)生許多手勢,例如down,up,scroll,filing等等。

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

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

GestureDetector這個類對外提供了兩個接口:OnGestureListener,OnDoubleTapListener,還有一個內(nèi)部類SimpleOnGestureListener。

GestureDetector.OnDoubleTapListener接口:用來通知DoubleTap事件,類似于鼠標的雙擊事件。

1,onDoubleTap(MotionEvent e):在雙擊的第二下,Touch down時觸發(fā) 。

2,onDoubleTapEvent(MotionEvent e):通知DoubleTap手勢中的事件,包含down、up和move事件(這里指的是在雙擊之間發(fā)生的事件,例如在同一個地方雙擊會產(chǎn)生DoubleTap手勢,而在DoubleTap手勢里面還會發(fā)生down和up事件,這兩個事件由該函數(shù)通知);雙擊的第二下Touch down和up都會觸發(fā),可用e.getAction()區(qū)分。

3,onSingleTapConfirmed(MotionEvent e):用來判定該次點擊是SingleTap而不是DoubleTap,如果連續(xù)點擊兩次就是DoubleTap手勢,如果只點擊一次,系統(tǒng)等待一段時間后沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然后觸發(fā)SingleTapConfirmed事件。這個方法不同于onSingleTapUp,他是在GestureDetector確信用戶在第一次觸摸屏幕后,沒有緊跟著第二次觸摸屏幕,也就是不是“雙擊”的時候觸發(fā)

GestureDetector.OnGestureListener接口:用來通知普通的手勢事件,該接口有如下六個回調(diào)函數(shù):

1. onDown(MotionEvent e):down事件;

2. onSingleTapUp(MotionEvent e):一次點擊up事件;在touch down后又沒有滑動

(onScroll),又沒有長按(onLongPress),然后Touchup時觸發(fā)。

點擊一下非??斓?不滑動)Touchup:

onDown->onSingleTapUp->onSingleTapConfirmed

點擊一下稍微慢點的(不滑動)Touchup:

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3. onShowPress(MotionEvent e):down事件發(fā)生而move或則up還沒發(fā)生前觸發(fā)該

事件;Touch了還沒有滑動時觸發(fā)(與onDown,onLongPress)比較onDown只要Touch down一定立刻觸發(fā)。而Touchdown后過一會沒有滑動先觸發(fā)onShowPress再是onLongPress。所以Touchdown后一直不滑動

按照onDown->onShowPress->onLongPress這個順序觸發(fā)。

4. onLongPress(MotionEvent e):長按事件;Touch了不移動一直Touch down時觸發(fā)

5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑動手

勢事件;Touch了滑動一點距離后,在ACTION_UP時才會觸發(fā)

參數(shù):e1 第1個ACTION_DOWN MotionEvent 并且只有一個;e2 最后一個ACTION_MOVE MotionEvent ;velocityX X軸上的移動速度,像素/秒 ;velocityY Y軸上的移動速度,像素/秒.觸發(fā)條件:X軸的坐標位移大于FLING_MIN_DISTANCE,且移動速度大于FLING_MIN_VELOCITY個像素/秒

6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上

拖動事件。無論是用手拖動view,或者是以拋的動作滾動,都會多次觸發(fā),這個方法在ACTION_MOVE動作發(fā)生時就會觸發(fā)

拋:手指觸動屏幕后,稍微滑動后立即松開

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

拖動

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

SimpleOnGestureListener類是GestureDetector提供給我們的一個更方便的響應(yīng)不同手勢的類,這個類實現(xiàn)了上述兩個接口(但是所有的方法體都是空的),該類是static class,也就是說它實際上是一個外部類。程序員可以在外部繼承這個類,重寫里面的手勢處理方法。

方法步驟

第一種示例:

1,通過GestureDetector的構(gòu)造方法可以將SimpleOnGestureListener對象傳遞進去,這樣GestureDetector能處理不同的手勢了。

public GestureDetector

(Context context, GestureDetector.OnGestureListener listener)

2,在OnTouchListener的onTouch方法中

private OnTouchListener gestureTouchListener = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

return gDetector.onTouchEvent(event);

}

};

第二種示例:

使用方法

private GestureDetector mGestureDetector;

mGestureListener = new BookOnGestureListener();

構(gòu)造出來mGestureDetector = new GestureDetector(mGestureListener);

class BookOnGestureListener implements OnGestureListener {

同時要public boolean onTouchEvent(MotionEvent event) {

mGestureListener.onTouchEvent(event);

}

第三種示例代碼

代碼:

01.private GestureDetector mGestureDetector;

02.@Override

03.public void onCreate(Bundle savedInstanceState) {

04. super.onCreate(savedInstanceState);

05. mGestureDetector = new GestureDetector(this, new LearnGestureListener());

06.}

07.@Override

08.public boolean onTouchEvent(MotionEvent event) {

09. if (mGestureDetector.onTouchEvent(event))

10. return true;

[!--empirenews.page--]

11. else

12. return false;

13.}

14.class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{

15. @Override

16. public boolean onSingleTapUp(MotionEvent ev) {

17. Log.d("onSingleTapUp",ev.toString());

18. return true;

19. }

20. @Override

21. public void onShowPress(MotionEvent ev) {

22. Log.d("onShowPress",ev.toString());

23. }

24. @Override

25. public void onLongPress(MotionEvent ev) {

26. Log.d("onLongPress",ev.toString());

27. }

28. @Override

29. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

30. Log.d("onScroll",e1.toString());

31. return true;

32. }

33. @Override

34. public boolean onDown(MotionEvent ev) {

35. Log.d("onDownd",ev.toString());

36. return true;

37. }

38. @Override

39. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

40. Log.d("d",e1.toString());

41. Log.d("e2",e2.toString());

42. return true;

43. }

44.}

1,在當前類中創(chuàng)建一個GestureDetector實例。

private GestureDetector mGestureDetector;

2,創(chuàng)建一個Listener來實時監(jiān)聽當前面板操作手勢。

class LearnGestureListener extends GestureDetector.SimpleOnGestureListener

3,在初始化時,將Listener實例關(guān)聯(lián)當前的GestureDetector實例。

mGestureDetector = new GestureDetector(this, new LearnGestureListener());

4,利用onTouchEvent方法作為入口檢測,通過傳遞MotionEvent參數(shù)來監(jiān)聽操作手勢。

1.mGestureDetector.onTouchEvent(event)

第四種示例代碼

private GestureDetector mGestureDetector;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mGestureDetector = new GestureDetector(this, new MyGestureListener());

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return mGestureDetector.onTouchEvent(event);

}

class MyGestureListener extends GestureDetector.SimpleOnGestureListener{

@Override

public boolean onSingleTapUp(MotionEvent ev) {

Log.d("onSingleTapUp",ev.toString());

return true;

}

@Override

public void onShowPress(MotionEvent ev) {

Log.d("onShowPress",ev.toString());

}

@Override

public void onLongPress(MotionEvent ev) {

Log.d("onLongPress",ev.toString());

}

}

基本的內(nèi)容就是創(chuàng)建一個GestureDetector的對象,傳入listener對象,在自己接收到的onTouchEvent中將event傳給GestureDetector進行分析,listener會回調(diào)給我們相應(yīng)的動作。其中GestureDetector.SimpleOnGestureListener(Framework幫我們簡化了)是實現(xiàn)了上面提到的OnGestureListener和OnDoubleTapListener兩個接口的類,我們只需要繼承它并重寫其中我們關(guān)心的回調(diào)即可。

最后,再提一下雙擊和三擊的識別過程:在第一次單擊down時,給Hanlder發(fā)送了一個延時300ms的消息,如果300ms里,發(fā)生了第二次單擊的down事件,那么,就認為是雙擊事件了,并移除之前發(fā)送的延時消息。如果300ms后仍沒有第二次的down消息,那么就判定為SingleTapConfirmed事件(當然,此時用戶的手指應(yīng)已完成第一次點擊的up過程)。三擊的判定和雙擊的判定類似,只是多了一次發(fā)送延時消息的過程。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉