簡體   English   中英

以編程方式在Android中模擬多點觸控事件以進行測試

[英]Simulate Multitouch Event In Android Programmatically For Testing

我需要模擬多點觸控事件(縮放,平移等),以用於Android應用程序的測試中。 一種方法是手動生成模擬真實輸入的對應的MotionEvent序列,然后逐一分發它們。 在此之前,是否有一些不錯的API可以進行這種模擬? 我想過去很多人都遇到過這個問題。 我一直在研究Robotium Solo ,但是它只為單個指針提供觸摸/拖動。

如果沒有這樣的API,那么解決問題的最佳方法是什么? 我當時正在考慮編寫一個函數,該函數為每個參與的指針接受一對點(起點,終點)和持續時間,但這將手勢限制為線性指針運動。

public void twoFingerTouchEvent(
             Point from1, Point to1, int duration1, 
             Point from2, Point to2, int duration2) {

  if (from1.equals(to1) && from2.equals(to2)) { 
    // two pointer tap
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // WAIT min(duration1, duration2)
    // DISPATCH_POINTER_UP
    // WAIT abs(duration1 - duration2)
    // DISPATCH_UP
  }
  else if (from1.equals(to1) || from2.equals(to2)) {
    // one of two pointers dragged after tap
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // DISPATCH_MOVE for moving pointer every 3-5 pixels, account for duration
    // DISPATCH_POINTER_UP
    // DISPATCH_UP 
  }
  else {
    // two pointer drag
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // DISPATCH_MOVE for both pointers in alternating order every 3-5 pixels
    // DISPATCH_POINTER_UP
    // DISPATCH_MOVE for pointer with longer duration
    // DISPATCH_UP 
  }
}

您應該使用MotionEvent#obtain-它可用於創建包含多個指針的MotionEvent。 您不僅限於線性指針運動-您可以傳遞點數組並向下執行一個動作,然后執行x次動作並最終向上動作。

MotionEvent的文檔中獲取:

對於API 9及以下版本,您將需要使用MotionEvent.ACTION_POINTER_X_DOWN / UP來指定向上或向下的指針。

事件順序是第一個聯系人的ACTION_DOWN,然后是ACTION_POINTER_X_DOWN或ACTION_POINTER_X_UP,因為添加或刪除了新聯系人,直到您最終擁有最后一個ACTION_UP事件來“提升”最后一個聯系人。

(actionId, pointerCount)
ACTION_DOWN, 1 // initial contact
ACTION_POINTER_2_DOWN, 2
ACTION_MOVE, 2 // generate a two-touch drag/zoom event
ACTION_POINTER_2_UP, 2
ACTION_UP, 1

我基於這篇SO帖子: 如何為Android測試生成縮放手勢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM