2011-03-03 12 views
11

मैं अपने परीक्षणों में बस एक स्पर्श - टैप, स्वाइप, होल्ड इत्यादि का अनुकरण कर सकता हूं, लेकिन एंड्रॉइड 2.2 के साथ एचटीसी डिजायर पर मल्टी टच सिमुलेटिंग के साथ पूरी तरह से अटक गया।एंड्रॉइड परीक्षण, उपकरणों का उपयोग कर मल्टीटाउच (ज़ूम इन/आउट) अनुकरण कैसे करें?

क्या आप सलाह दे सकते हैं, मैं बहु स्पर्शों का परीक्षण करने के लिए ईवेंट श्रृंखला को पुन: पेश कैसे कर सकता हूं?

मुझे लगता है कि मुझे कुछ मुश्किल प्रकार के मोशनवेन्ट जैसे एमएएसके या इस तरह कुछ उपयोग करने की आवश्यकता है, लेकिन यह नहीं पता कि यह कैसे किया जाता है।

मैं यहाँ पाया है reproduced जूम करने की घटनाओं में से एक डंप: http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775?tag=mantle_skin;content

1. event ACTION_DOWN[#0(pid 0)=135,179] 
2. event ACTION_MOVE[#0(pid 0)=135,184] 
3. event ACTION_MOVE[#0(pid 0)=144,205] 
4. event ACTION_MOVE[#0(pid 0)=152,227] 
5. event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=153,230;#1(pid 1)=380,538] 
6. event ACTION_MOVE[#0(pid 0)=153,231;#1(pid 1)=380,538] 
7. event ACTION_MOVE[#0(pid 0)=155,236;#1(pid 1)=364,512] 
8. event ACTION_MOVE[#0(pid 0)=157,240;#1(pid 1)=350,498] 
9. event ACTION_MOVE[#0(pid 0)=158,245;#1(pid 1)=343,494] 
10. event ACTION_POINTER_UP(pid 0)[#0(pid 0)=158,247;#1(pid 1)=336,484] 
11. event ACTION_MOVE[#0(pid 1)=334,481] 
12. event ACTION_MOVE[#0(pid 1)=328,472] 
13. event ACTION_UP[#0(pid 1)=327,471] 

यहाँ मेरी समस्या नहीं है:

  1. घटना ACTION_POINTER_DOWN (पीआईडी ​​1) [ # 0 (पिड 0) = 153,230; # 1 (पिड 1) = 380,538]
  2. ईवेंट ACTION_MOVE [# 0 ** (पिड 0) = 153,231 **; # 1 ** (पिड 1) = 380,538 **]

मैं 4 निर्देशांक (पिड 0 x0 y0 और pid 1 x1 y1) के साथ ईवेंट कैसे उत्पन्न कर सकता हूं?

ऐसा लगता है कि मैं जिस तरह से कैसे निम्न इवेंट का उपयोग करने के खोजने की जरूरत है:,

सार्वजनिक स्थिर MotionEvent प्राप्त (लंबी डाउनटाइम, लंबी EVENTTIME, पूर्णांक कार्रवाई, पूर्णांक संकेत int [] pointerIds, PointerCoords [] pointerCoords, int metaState, उत्तर के लिए xPrecision नाव, नाव yPrecision, पूर्णांक DeviceID, पूर्णांक edgeFlags, पूर्णांक स्रोत, झंडे int)

धन्यवाद दान करने के लिए, मैं इस तर्क की कोशिश की है, लेकिन अभी भी निर्देशांक जोड़ने के लिए समस्याओं का सामना:

MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 135, 179, 0); 
      inst.sendPointerSync(event); 
//    eventTime+=100; 
      event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 135, 184, 0); 
      inst.sendPointerSync(event); 
//    eventTime+=100; 

      int pointerToMove = 1; // pointer IDs are zero-based 
      event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_POINTER_DOWN, 138, 189, 0); 
      inst.sendPointerSync(event); 


      event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, 158, 220, 0); 
      inst.sendPointerSync(event); 

//    eventTime+=100; 
      event = MotionEvent.obtain(downTime, eventTime, (2 * 256) + MotionEvent.ACTION_MOVE, 138, 180, 0); 
      inst.sendPointerSync(event); 
//    eventTime+=100; 
      event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 135, 184, 0); 

इन घटनाओं अनुक्रम अपने परीक्षण ठूंठ में फंस गए और इस तरह फेंक दिया जाता है:

(14368): event ACTION_DOWN[#0(pid 0)=135,179] 
(14368): event ACTION_MOVE[#0(pid 0)=135,184] 
(14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189] 
(14368): event ACTION_MOVE[#0(pid 0)=158,220] 
(14368): event ACTION_MOVE[#0(pid 0)=138,180] 
(14368): event ACTION_MOVE[#0(pid 0)=135,184] 

यहाँ आप देख सकते हैं, कि (2 * 256) + MotionEvent.ACTION_MOVE घटना :( और pointerToMove के लिए सूचक आईडी नहीं बदलता है < < MotionEvent.ACTION_POINTER_INDEX_SHIFT दृष्टिकोण ACTION_POINTER_DOWN के लिए काम नहीं कर रहा है, क्या मुझे POINTER_DOWN के लिए इस तरह का उपयोग करने की अनुमति नहीं दी जा सकती है?

मेरे मुद्दा यह है कि मैं सूचक 0 और सूचक 1 के लिए coords के 2 जोड़ी उत्पन्न नहीं कर सकते है:

(14368): event ACTION_POINTER_DOWN(pid 1)[#0(pid 0)=138,189] 

यहाँ आप देख सकते हैं, अपने तर्क का प्रयोग है कि मैं इस घटना के लिए pid1 को शामिल किया है, लेकिन यह अभी भी कोई निर्देशांक नहीं है, क्योंकि x और y pid 0 से जुड़े थे ..

अग्रिम धन्यवाद।

Yahor

फिर भी कोई विचार है कि यह कैसे लागू करने के लिए है, किसी को कभी भी एक मल्टीटच घटना भेजी थी?

+0

आप इस समस्या को हल किया? – thiagolr

उत्तर

2

मेरा मानना ​​है कि आपको केवल MotionEvent.obtain को दिए गए 'एक्शन' पैरामीटर में पॉइंटर इंडेक्स को इंगित करने की आवश्यकता है। विशेष रूप से, कार्रवाई के ऊपरी 8-बिट पॉइंटर इंडेक्स हैं और निचले 8-बिट्स क्रिया है (उदा। मोशनवेन्ट।ACTION_MOVE)। तो, यह काम करना चाहिए अगर आप दूसरे सूचक ले जाना चाहते हैं:

int pointerToMove = 1; // pointer IDs are zero-based 
event = MotionEvent.obtain(downTime, eventTime, (pointerToMove << MotionEvent.ACTION_POINTER_INDEX_SHIFT) + MotionEvent.ACTION_MOVE, x0, y0, 0); 
inst.sendPointerSync(event); 

-Dan

+0

उत्तर के लिए धन्यवाद, अब मुझे पता है कि आपके दृष्टिकोण का उपयोग करके पॉइंटर आईडी कैसे चुनें, लेकिन इस मामले में, पीआईडी ​​कॉर्ड के बिना दिखाई देता है: आप देख सकते हैं कि डंप किए गए ईवेंट में केवल एक जोड़ी है: ईवेंट ACTION_POINTER_DOWN (pid 2) [# 0 (पिड 0) = 138,18 9] तुलना करने के लिए, घटना के मूल डंप, उंगलियों से छूते समय: # ईवेंट ACTION_POINTER_DOWN (पिड 1) [# 0 (पिड 0) = 153,230; # 1 (पिड 1) = 380,538] – user643154

0

मैं माना this आप मदद कर सकते हैं ..

संबंधित मुद्दे