2010-09-30 26 views
21

को स्पर्श घटना को सौंपने मैं निम्न पदानुक्रम है: Activity ->PopupWindow ->CustomViewएंड्रॉयड: अंतर्निहित दृश्य

मेरे PopupWindow ही है, एक वर्ग है, लेकिन पारदर्शी है ताकि आप गतिविधि पृष्ठभूमि में बैठे देख सकते हैं। CustomView पॉपअपविंडो के अंदर एम्बेडेड एक सर्कल है। alt text

मैं अब तक क्या हासिल किया हरे वृत्त पर

  1. उपयोगकर्ता क्लिक करता है और मैं "कुछ सामान"
  2. उपयोगकर्ता क्लिक के आह्वान PopupWindow के बाहर और स्पर्श घटना गतिविधि के लिए भेजा जाता है।

लापता हिस्सा किसी भी स्पर्श घटना है कि गतिविधि PopupWindow अंदर लेकिन बाहर CustomView (चक्र) होता प्रेषण करने के लिए, अब है।

मुझे पहले से ही पता है कि स्पर्श कैसे मेरे सर्कल के बाहर है। मुझे गतिविधि में इसे प्रतिनिधि देने में समस्याएं हैं।

मेरी CustomView में मैं onTouch

if (radiusTouch > maxRadius) { 
    return false; 
} 

में निम्नलिखित है मेरी PopupWindow मैं पहले से ही सेटअप निम्नलिखित में, लेकिन यह कभी कहा जाता हो जाता है:

popup.setTouchInterceptor(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.i(TAG, "PopupWindow :: onTouch()"); 
     return false; 
    } 
}); 

कुछ भी बाकी मैं सौंपने के लिए क्या करना है स्पर्श घटना घटना के लिए सभी तरह से?

+3

आपने उस नकली को कैसे बनाया?यह बहुत चिकना है – browep

+1

आप PopUpWindow के नीचे दिए गए दृश्यों पर क्लिक ईवेंट को प्रेषित करने का प्रबंधन कैसे करते थे? – Mannaz

+1

मस्तिष्क बाल्सामिक मॉकअप द्वारा किया गया है http://balsamiq.com/products/mockups/ –

उत्तर

0

यह बहुत बुरा है कि पॉपअपविंडो व्यू ग्रुप या यहां तक ​​कि व्यू का उप-वर्ग नहीं है। फिर आप प्रेषण टचवेन्ट को ओवरराइड कर सकते हैं। क्या आप पॉपअपविंडो के बारे में जानने के लिए अपने कस्टम व्यू को संशोधित कर सकते हैं और सर्कल के बाहर एक क्लिक होने पर इसे बर्खास्त() पर कॉल कर सकते हैं?

12

पर विचार करें FLAG_NOT_TOUCH_MODAL:

/** Window flag: Even when this window is focusable (its 
    * {@link #FLAG_NOT_FOCUSABLE is not set), allow any pointer events 
    * outside of the window to be sent to the windows behind it. Otherwise 
    * it will consume all pointer events itself, regardless of whether they 
    * are inside of the window. */ 
public static final int FLAG_NOT_TOUCH_MODAL = 0x00000020; 

आप विंडो झंडे के बाद पॉप अप विंडो दिखाया गया था upate के लिए इस कोड का उपयोग कर सकते हैं।

FrameLayout popupContainer = (FrameLayout)contentView.getParent(); 
WindowManager.LayoutParams p = (WindowManager.LayoutParams)popupContainer.getLayoutParams(); 
p.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); 
windowManager.updateViewLayout(popupContainer, p); 
+0

ठीक है। यह काम करता हैं। मैं 'popupWindow' और गतिविधि के विचारों के अंदर दोनों विचारों को स्पर्श कर सकता हूं। बस 'UpdateViewLayout (contentView, p)', नहीं 'contentView.getParent() ' – Yeung

3

अपने PopupWindow उदाहरण पर इन सेट करके देखें:

window.setBackgroundDrawable(new BitmapDrawable());

window.setOutsideTouchable(true);

और

window.setTouchable(true);

यह सिर्फ एक सुझाव है ... मेरे पास है इसका परीक्षण नहीं किया। अगर यह काम करता है तो मुझे बताएं।

[नोट: यह टच इवेंट्स पर कॉल करने के लिए ऑन टच() के लिए है ..]

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