2014-10-21 4 views
8

से ट्रिगर किया गया था, तो मेरे पास एक यूएक्स आवश्यकता है कि उपयोगकर्ता को GridView में लंबे समय तक दबाकर ट्रिगर करता है।डायलॉग से यूपी/कैंसल को पंजीकृत करना जब डाउन इवेंट को व्यू के लॉन्गप्रेस

  • Dialog प्रदर्शित किया जाता है जबकि उपयोगकर्ता UP/CANCEL घटना को ट्रिगर बिना स्क्रीन के आसपास अपनी उंगली/अंगूठे ले जाने में सक्षम है, जब वे GridView सेल की सीमा छोड़ होना चाहिए।

  • जब उपयोगकर्ता अंततः स्क्रीन से संपर्क तोड़ता है तो मैं पर कब्जा करने के लिए देख रहा हूं। GridViewUP/CANCEL के लिए कुछ झूठी सकारात्मक दर्ज करने लगता है कि हम किसी अन्य विचार का उपयोग नहीं देखते हैं।

  • मुद्दा यह है कि मूल दृश्य कब्जा सभी स्पर्श ईवेंट क्योंकि DOWN यह द्वारा कब्जा कर लिया गया था।

  • संवाद को पंजीकृत करता है/मूल दृश्य से यूपी ईवेंट के बाद तक कोई स्पर्श नहीं देखता है।

मैं मूल स्पर्श घटना रद्द किए जाने और dispatchTouch() का उपयोग कर, आदि कोई खुशी की कोशिश की है।

कोई विचार?

+0

क्या आप अधिक विशिष्ट हो सकते हैं? मुझे समझ में नहीं आता कि आप क्या करना चाहते हैं। – TheRedFox

+0

दृश्य या खंड में कोई दृश्य है जब दृश्य को दबाया जाता है (काम कर रहा है) एक संवाद के प्रदर्शन को ट्रिगर करता है। उपयोगकर्ता संवाद को ट्रिगर करने वाले दृश्य से अपनी अंगुली को स्थानांतरित करने में सक्षम होना चाहिए, लेकिन स्क्रीन से संपर्क कभी भी तोड़ना नहीं चाहिए। जब, और केवल जब उपयोगकर्ता स्क्रीन के साथ संपर्क तोड़ता है तो एक और घटना ट्रिगर करता है। समस्या: जब मूल दृश्य की सीमाओं के बाहर आगे बढ़ते हैं ACTION_UP और/या ACTION_CANCEL ट्रिगर किए जाते हैं और संवाद (या कुछ और) द्वारा कोई स्पर्श पंजीकृत नहीं होता है जब तक कि उपयोगकर्ता स्क्रीन से संपर्क को तोड़ देता है और रीटच करता है। –

+0

मैंने ग्रिड व्यू के बिना कुछ ऐसा किया है। उपयोगकर्ता को लंबे समय तक एक संवाद प्रेस करना होगा, उपयोगकर्ता दिखाई देगा जब उपयोगकर्ता हर जगह अपनी उंगली (दबाकर) स्थानांतरित कर सकता है और जब उपयोगकर्ता उठाता है तो उंगली संवाद छुपा रहता है। कृपया वीडियो बनाने पर विचार करें और इसे यहां पोस्ट करें। मैं इस भाग को समझ नहीं पाया (और जब तक उपयोगकर्ता स्क्रीन से संपर्क तोड़ता है और फिर से छूता है तब तक संवाद (या कुछ और) द्वारा कोई स्पर्श पंजीकृत नहीं होता है।) –

उत्तर

2

मैंने अपनी परियोजनाओं में से किसी एक में ऐसा कुछ उपयोग किया है।

अपने ग्रिड व्यू के प्रत्येक सेल में OnTouchListener असाइन करें और ऑन टच विधि को ओवरराइड करें।

@Override 
public boolean onTouch(View v, MotionEvent event) { 

boolean isLongPressed; 

int mSwipeSlop = ViewConfiguration.get(context). 
       getScaledTouchSlop(); 

boolean mSwiping; 

switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     handler.postDelayed(mLongPressed, 1000); 
     break; 

    case MotionEvent.ACTION_CANCEL: 
     handler.removeCallbacks(mLongPressed); 
     break; 

    case MotionEvent.ACTION_MOVE: 
     float x = event.getX() + v.getTranslationX(); 
      float deltaX = x - mDownX; 
      float deltaXAbs = Math.abs(deltaX); 
      float y = event.getY() + v.getTranslationY(); 
      float deltaY = Y - mDownY; 
      float deltaYAbs = Math.abs(deltaY); 
      float absDist = Math.sqrt(Math.pow(deltaXAbs, 2) + Math.pow(deltaXAbs, 2)); 
      if (!mSwiping) { 
       if (absDist > mSwipeSlop) { 
        mSwiping = true; 
        handler.removeCallbacks(mLongPressed); 
       } 
      } 
     break; 

    case MotionEvent.ACTION_UP: 
     handler.removeCallbacks(mLongPressed); 
     if (isLongPressed) { 
      // DO ACTION UP 
     } 
     break; 

    default: 
     return false; 
    } 
return true; 
} 

रननेबल mLongPressed में संवाद खोलें, जो केवल तभी चलाएगा जब उपयोगकर्ता एक सेकंड के लिए एक ही स्थान को छुआ हो। आप उस दूरी को बदल सकते हैं जिसे वह स्थानांतरित कर सकता है और जिस समय उसे पाठ्यक्रम के लंबे क्लिक के रूप में पंजीकरण करने के लिए प्रेस करने की आवश्यकता होती है। हालांकि, मैं दूरी के लिए getScaledTouchSlop() का उपयोग करने की सलाह दूंगा।

final Handler handler = new Handler(); 
Runnable mLongPressed = new Runnable() { 
    public void run() { 
     // OPEN DIALOG 
     isLongPressed = true; 
    } 
}; 

अपने प्रोजेक्ट में इस कोड का उपयोग करके, उपयोगकर्ता बिना ACTION_UP शुरू हो रही पूरे स्क्रीन के चारों ओर अपनी उंगली स्थानांतरित कर सकते हैं। केवल जब वह अपनी उंगली उठाता है, तो यह ट्रिगर होता है।

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