android滑動事件
① 移動端touch觸屏滑動事件、滑動觸屏事件監聽!
一、觸摸事件
ontouchstart、ontouchmove、ontouchend、ontouchcancel
目前移動端瀏覽器均支持這4個觸摸事件,包括IE。由於觸屏也支持MouseEvent,因此他們的順序是需要注意的:touchstart → mouseover → mousemove → mousedown → mouseup → click1
Apple在iOS 2.0中引入了 觸摸事件API ,Android正迎頭趕上這一事實標准,縮小差距。最近一個W3C工作組正合力制定這一 觸摸事件規范 。
二、規范
這里我們介紹幾種普及得比較好的觸摸事件,你可以在絕大多數現代瀏覽器中來測試這一事件(必須是觸屏設備哦):
touchstart: 觸摸開始的時候觸發
touchmove: 手指在屏幕上滑動的時候觸發
touchend: 觸摸結束的時候觸發
而每個觸摸事件都包括了三個觸摸列表,每個列表裡包含了對應的一系列觸摸點(用來實現多點觸控):
touches: 當前位於屏幕上的所有手指的列表。
targetTouches: 位於當前DOM元素上手指的列表。
changedTouches: 涉及當前事件手指的列表。
每個觸摸點由包含了如下觸摸信息(常用):
identifier: 一個數值,唯一標識觸摸會話(touch session)中的當前手指。一般為從0開始的流水號(android4.1,uc)
target: DOM元素,是動作所針對的目標。
pageX / pageX / clientX / clientY/screenX/screenY : 一個數值,動作在屏幕上發生的位置(page包含滾動距離,client不包含滾動距離,screen則以屏幕為基準)。
radiusX / radiusY/ rotationAngle: 畫出大約相當於手指形狀的橢圓形,分別為橢圓形的兩個半徑和旋轉角度。初步測試瀏覽器不支持,好在功能不常用,歡迎大家反饋。
有了這些信息,我們就可以依據這些事件信息為用戶提供不同的反饋了。
下面,我將為大家展示一個小demo,用touchmove實現的單指拖動:
三、手勢事件
手勢是指利用多點觸控進行旋轉、拉伸等操作,例如圖片、網頁的放大、旋轉。需要兩個或以上的手指同時觸摸時才會觸發手勢事件。關於縮放我們需要注意的一點 是元素的位置坐標:我們通常使用offsetX、getBoundingClientRect等方法獲取元素的位置坐標,但在手機瀏覽器中頁面經常會在使 用中被縮放,那縮放後的元素坐標會改變嗎?答案是有所差異。用一個情景來說明這個問題:頁面A載入完成後, JavaScript 獲 取到該元素在document中的坐標為(100,100),接著用戶放大了頁面,此時用JavaScript再次輸出元素坐標,依然還是 (100,100),但該元素在屏幕上的響應區域會根據縮放比例產生偏移。你可以打開那個打磚塊游戲demo,等頁面完全載入完成後,再放大,此時你會發 現即使手指觸摸在「touch here」區域外部,也可以控制到球板,因為區域發生了偏移。除非頁面刷新或者恢復縮放,否則偏移量將一直存在。
四、重力感應
重力感應較簡單,只需要為body節點添加onorientationchange事件即可。在此事件中由window.orientation屬性得到代表當前手機方向的數值。window.orientation的值列表如下:
0:與頁面首次載入時的方向一致
-90:相對原始方向順時針轉了90°
180:轉了180°
90:逆時針轉了90°據我測試,Android2.1尚未支持重力感應。以上即目前的觸屏事件,這些事件尚未並入標准,但已被廣泛使用。本人Android2.1,未在其他環境下測試。
② android中,怎麼滑動上面的年和月來變化月份,實現上一個月下一個月
在Android中實現滑動年月來切換月份的功能,可以通過自定義GroupView來處理左右滑動事件。首先,需要在GroupView中監聽觸摸事件,獲取用戶滑動的方向和距離。當滑動距離達到一定程度時,判斷為上下一個月的操作。
具體步驟包括:
1. 創建一個自定義GroupView,繼承自View或ViewGroup。
2. 重寫觸摸事件方法,例如onTouchEvent,來處理滑動事件。
3. 在觸摸事件中,通過計算手指滑動的距離,來判斷用戶是想要切換到上一個月還是下一個月。
4. 根據滑動方向和距離,更新當前月份,並調用相應的介面通知月份變化。
5. 為了實現平滑過渡,可以在滑動過程中動態改變月份顯示,而不是直接跳轉。
6. 最後,確保在月份變化時,日歷組件能夠正確地同步更新,展示新的月份和日期。
通過這種方式,用戶可以通過滑動年月來輕松地查看不同的月份,提供更加友好的用戶體驗。同時,這種方法也使得代碼結構更加清晰,便於後續的維護和擴展。
在實現過程中,可以使用GestureDetector來簡化觸摸事件的處理。通過設置合適的觸摸事件監聽器,能夠更方便地獲取用戶的滑動意圖。
此外,還可以考慮添加一些動畫效果,使得月份切換更加平滑自然。這可以通過在更新月份的同時,逐漸改變顯示的日期來實現。
總之,通過自定義GroupView並結合觸摸事件處理,可以實現一個流暢且用戶友好的月份切換功能。