2011-09-12 16 views
8

मुझे एक कस्टम दृश्य मिला है जो एक बटन की तरह काम करता है। जब उपयोगकर्ता इसे दबाता है तो मैं पृष्ठभूमि को बदलना चाहता हूं, जब पृष्ठभूमि उंगली को बाहर ले जाता है या इसे छोड़ देता है तो पृष्ठभूमि को मूल में वापस लेना चाहता हूं और मैं ऑनक्लिक/ऑन लोंगक्लिक घटनाओं को भी संभालना चाहता हूं। समस्या यह है कि ऑन टच मुझे ACTION_DOWN के लिए सच होने की आवश्यकता है या यह मुझे ACTION_UP ईवेंट नहीं भेजेगा। लेकिन अगर मैं सच हो जाता हूं onClick श्रोता काम नहीं करेगा।एंड्रॉइड ऑन टच ऑनक्लिक और ऑन लोंगक्लिक

मैंने सोचा कि मैंने इसे टच में झूठ लौटकर और ऑनक्लिक पर पंजीकरण करके हल किया - यह किसी भी तरह काम करता था, लेकिन दस्तावेज़ों के खिलाफ थोड़े थे। मुझे अभी एक उपयोगकर्ता से एक संदेश मिला है जो मुझे बता रहा है कि वह बटन पर लंबे समय तक क्लिक करने में सक्षम नहीं है, इसलिए मैं सोच रहा हूं कि यहां क्या गलत है।

वर्तमान कोड के भाग:

public boolean onTouch(View v, MotionEvent evt) 
{ 
    switch (evt.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
    { 
     setSelection(true); // it just change the background 
     break; 
    } 

    case MotionEvent.ACTION_CANCEL: 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_OUTSIDE: 
    { 
     setSelection(false); // it just change the background 
     break; 
    } 
    } 

    return false; 
} 

public void onClick(View v) 
{ 
    // some other code here 
} 

public boolean onLongClick(View view) 
    { 
    // just showing a Toast here 
    return false; 
    } 


// somewhere else in code 
setOnTouchListener(this); 
setOnClickListener(this); 
setOnLongClickListener(this); 

मैं कैसे उन्हें एक साथ सही ढंग से काम कर सकता हूँ?

अग्रिम

उत्तर

10

onClick & onLongClick धन्यवाद वास्तव में View.onTouchEvent से भेजा जाता है।

अगर आप View.onTouchEvent ओवरराइड या setOnTouchListener के माध्यम से कुछ विशिष्ट View.OnTouchListener निर्धारित करते हैं, आपको लगता है कि के लिए देखभाल करनी चाहिए।

तो अपने कोड होना चाहिए कुछ की तरह:

 
public boolean onTouch(View v, MotionEvent evt) 
{ 
    // to dispatch click/long click event, 
    // you must pass the event to it's default callback View.onTouchEvent 
    boolean defaultResult = v.onTouchEvent(evt); 

    switch (evt.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
    { 
     setSelection(true); // just changing the background 
     break; 
    } 
    case MotionEvent.ACTION_CANCEL: 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_OUTSIDE: 
    { 
     setSelection(false); // just changing the background 
     break; 
    } 
    default: 
     return defaultResult; 
    } 

    // if you reach here, you have consumed the event 
    return true; 
} 
संबंधित मुद्दे