我正在編寫一個OnTouchListener
。我發現我可以用位操作,如如何過濾API級別3上的MotionEvent.getAction()(不存在ACTION_MASK)
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE)
檢查的操作類型然而MotionEvent.ACTION_MASK
是不存在的Android 1.5(API等級3) 如何/爲它做呢?
我正在編寫一個OnTouchListener
。我發現我可以用位操作,如如何過濾API級別3上的MotionEvent.getAction()(不存在ACTION_MASK)
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE)
檢查的操作類型然而MotionEvent.ACTION_MASK
是不存在的Android 1.5(API等級3) 如何/爲它做呢?
ACTION_MASK
用於分隔實際動作和指針標識符(例如,第一根手指,第二根手指等)getAction()中返回的值的前8位是實際操作部分,因此當您按位與 - 它與action mask(= 11111111 = 255 = 0xff),你只剩下行動和沒有指針信息。
在Android 1.5/API級別3中,我們不支持MotionEvent
類中的多個指針(即多點觸控)。對於單個指針事件,指針位未設置。因此,您可以只比較與所需的行動不變的情況下,以獲得特定的動作檢查:
if ((event.getAction() == MotionEvent.ACTION_MOVE) {...}
萬一,這是不行的,你可以嘗試定義自己的行動面具常數爲255,並按照後面的API版本與動作進行比較。
在docs對於MotionEvent
(或實際上任何Android參考頁面),都有一個複選框可按API級別過濾。如果您選擇API級別3,那麼您可以看到該級別的狀態。所有與不同指針相關的方法和常量都是灰色的。
非常感謝您的時間和答覆。我仍然想知道,因爲這個表達式將解決在較新的Android版本爲假。這將*在任何設備/水平從3到現在工作*?如果是,是因爲我在項目創建時輸入的目標/ min_sdk信息? – unR
對於單指針觸摸事件,該表達式始終有效,即使對於以後的API級別也是如此。對於單個指針,其他(指針)位未設置,因此不需要掩碼。 – antonyt
非常感謝。公認 – unR