轉自: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
歡迎下載
