在Android中區分點擊和滑動操作


 

轉自:http://blog.csdn.net/do168/article/details/51587933

最近在寫一個圖片瀏覽安卓應用,想要弄成全屏顯示,只在單擊時顯示工具欄和狀態欄,在觸摸滑動時翻頁。經過幾個小時在互聯網上的搜索也沒找到合適的例子尷尬

知道Android Studio的模板里有一個全屏的模板,於是使用android studio中的全屏模板新建了一個工程,啟動測試了一下。應用啟動時就自動隱藏了工具欄和狀態欄,點擊屏幕后會重新顯示出來,正是我所需要的。哇,真不錯吐舌頭

但也有問題,觸摸滑動和點擊居然不分家,最終都會觸發點擊事件。這該怎么辦呢?研究了一下setOnTouchListener事件,發現該事件最后的返回值可以影響是否還會執行后面的點擊事件。也就是返回true不執行后面的事件,返回false則繼續執行后面的事件。

於是寫了下面的代碼,來區分用戶的操作意圖,從頁觸發不同的事件。

 1     private static float DownX = 0;
 2     private static float DownY = 0;
 3     private static float moveX = 0;
 4     private static float moveY = 0;
 5     private static long currentMS = 0;   
 6 
 7    。。。。。。
 8 
 9  mContentView.setOnTouchListener(new View.OnTouchListener() {  
10         @Override  
11         public boolean onTouch(View v, MotionEvent event) {  
12             switch (event.getAction()) {  
13                 case MotionEvent.ACTION_DOWN:  
14                     DownX = event.getX();//float DownX  
15                     DownY = event.getY();//float DownY  
16                     moveX = 0;  
17                     moveY = 0;  
18                     currentMS = System.currentTimeMillis();//long currentMS     獲取系統時間  
19                     break;  
20                 case MotionEvent.ACTION_MOVE:  
21                     moveX += Math.abs(event.getX() - DownX);//X軸距離  
22                     moveY += Math.abs(event.getY() - DownY);//y軸距離  
23                     DownX = event.getX();  
24                     DownY = event.getY();  
25                     break;  
26                 case MotionEvent.ACTION_UP:  
27                     long moveTime = System.currentTimeMillis() - currentMS;//移動時間  
28                     //判斷是否繼續傳遞信號  
29                     if(moveTime>200&&(moveX>20||moveY>20)){  
30                         return true; //不再執行后面的事件,在這句前可寫要執行的觸摸相關代碼。點擊事件是發生在觸摸彈起后  
31                     }  
32                     break;  
33             }  
34             return false;//繼續執行后面的代碼  
35         }  
36     });  

 


上面的代碼通過計算觸摸時間和觸摸期間移動的距離來判斷用戶的操作意圖。

當觸摸時間較長,並且移動了一定距離后,我們就斷定發生了觸摸滑動操作,並返回true,下再引發后面的事件;否則繼續觸發后面的點擊事件。

我建了一個Git倉庫,存放我嘗試過的例子,完整 代碼都放在那里。

https://code.csdn.NET/do168/androidtestcenter

歡迎下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM