1. 將來做程序員這類工作的時候打字收拾一定要正確么我經常玩游戲,手勢該過來太費勁了
沒錯 打游戲的手法對打代碼有很大影響,可以下載金山打字通進行練習,祝你如願
2. 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種)
3. 如何運用python建立手勢庫
用什麼語言不重要。不過python相對其它語言來說,開發速度是一流的。
手勢庫的格式與內容這個先確定下來。 是用於瀏覽器的手勢 ,還是手機上的手勢,或者是你可能做視頻的識別的手勢, 先明確下來。
然後就可以建立測試用例, 模擬測試演算法,顯示測試結果。這些演算法訓練都可以用python來實現。
不過大部分情況下,特別是手機上的手勢,都是程序員在腦子里做一下空間想像就做出來的。不用這么復雜。
4. 手勢1024是什麼意思
手勢1024所表達的含義,類似於「頂」、「非常棒,一級棒「;
(4)程序員手勢分析擴展閱讀:
1024是一種逐漸流行的回帖方式,常見於BBS、網路社區和論壇的網友交流中。其常見形式為「1024」、「1024頂」兩種形式。
1024是程序員自發認定的節日,表明10月24日,是程序員節,這是由於信息量的單位1GB=1024MB,1MB=1024KB,1kb=1024Byte,程序員們就把1024作為了一種表示自己身份的符號1024。
5. 現實中程序員是怎樣飛快敲代碼的
敲代碼很快有幾個條件
1.對項目代碼和結構非常熟悉,知道整個數據流的在代碼中的流動過程和變化過程。知道當前新增的代碼在整個項目處於哪個位置,對於數據會有產生什麼新的變化。這些要心理有數。也就是從架構層面去思考代碼的編寫。
2.對於需求理解的很透。這樣業務邏輯轉成代碼邏輯就不會有任何不清楚的地方。
3.已經解決了技術難點,也就是說前期測試性代碼已經寫過了弄清楚了,避免了突然出現的技術性難點
4.新增的代碼和新增的數據結構已經仔細思考過了,並設計好。也清楚引入這些新的代碼和數據結構對現有代碼的整體影響
5.異常點的位置的處理方案已經安排好了。寫代碼一部分是正常業務流程,演算法過程,但是另外一大塊就是處理各種異常。當異常出現之後,是代碼重試,報錯後忽略,還是報錯之後停止代碼,還是報錯後清理代碼並重新恢復上一個狀態,等等。這些都是要心理有數。
6.對於如何新增源代碼文件,命名函數,命名文件名,命名類名,命名變數名有一整套方案。有時候想個函數名或者變數名都要卡好幾分鍾,就不算飛快了。別笑,想個變數名,網路十來分鍾的時候多了去了。
7.外部環境已經准備好了。IDE穩定,資料庫結構穩定,數據穩定,網路穩定,訪問網頁順暢,准備好免打擾的牌子。准備好刷卡提需求的二維碼,准備好板磚和大刀,預防產品經理提需求和改需求。