2012-06-08 33 views
5

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

img.setOnLongClickListener(longClickAction); 
img.setOnTouchListener(touchAction); 

onLongPress:

OnLongClickListener longClickAction = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     parentLayout.removeView((ImageView)v); 
     return false; 
    } 
}; 

onTouch:

OnTouchListener touchAction = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     ImageView i = (ImageView)v; 

     //perfrom zoom operation on touch of imageview 
     zoom(i, event); 
     return true; 

    } 
}; 

केवल को स्पर्श घटनाओं काम कर रहे हैं। क्यूं कर? मैं दोनों कैसे हो सकता है? मैं कहाँ गलत हो रहा हूँ? अतिरिक्त दृश्य को हटाने के लिए मुझे क्या करना चाहिए? क्रिप्या मेरि सहायता करे। अग्रिम में धन्यवाद।

+0

आप इसे हल कर लिया है? – Siddhesh

+0

@ सिद्धेश मेरे [नीचे दिए गए उत्तर] का पालन करें (http://stackoverflow.com/a/41952363/4629101), समस्या हल हो जाएगी। –

उत्तर

13

onTouch हमेशा अपने दृश्य के लिए कहा जाता है के बाद से इस दृष्टिकोण के घटनाओं भेजने की प्रारंभिक अवस्था है। जब आप अपने दृश्य को लंबे समय तक दबाते हैं तो यह अभी भी onTouch पर कॉल करता है और जब आप onTouch (जिसका अर्थ है कि आपने इस घटना का उपभोग किया है और इसे आगे प्रेषित नहीं किया जाना चाहिए) तो आपको onLongPress नहीं मिलेगा। यह चाल falseonTouch

+4

लेकिन फिर 'ऑन टच' और 'ऑन लोंगप्रेस' दोनों को बुलाया जाएगा। 'ऑन लोंगप्रेस' का अर्थ है 'ऑन टच' पर कॉल न करें? –

+0

@ लुइस ए। फ्लोरिट: क्या आपको इसके लिए कोई समाधान मिला है? मेरे साथ एक ही समस्या, दोनों टच और ऑन लोंगप्रेस को एक समय में बुलाया जाता है .. – Tejas

+0

नोट किया जाना चाहिए @luis A. Florit –

-2

इसे आजमाएं, यह मेरे लिए ठीक काम करता है।

boolean isMoving= false; 

yourView.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      isMoving = true; 
      Log.i("isMoving:", "true"); 
     } 
     if(event.getAction()==MotionEvent.ACTION_UP){ 
      isMoving=false; 
      Log.i("isMoving:","false"); 
     } 
     return false; 
    } 
}); 
yourView.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     if(!isMoving){ 
      //do onlongclick event here 
     } 
     return true; 
    } 
});; 
1

रूप @asenovmonTouch() द्वारा चर्चा हमेशा कहा जाता है के रूप में यह देखने के लिए घटनाओं भेजने की प्रारंभिक अवस्था है, लेकिन यदि हम तब दोनों onTouch() में मूल्य झूठी वापसी एक आकर्षण की तरह काम करेगा और समस्या हल हो जाएगी।

संपादित करें: उपयोगकर्ताओं के लिए मेरे सुझाव है कि बजाय OnLongClickListener() और OnTouch() एक साथ लागू करने की, में डबल क्लिक करें घटना OnLongClickListener() के समारोह का उपयोग कर प्रयास है।

आप निम्न तरीकों से डबल क्लिक करें लागू कर सकते हैं:

int i = 0; 
btn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    i++; 
    Handler handler = new Handler(); 
    Runnable r = new Runnable() { 

     @Override 
     public void run() { 
      i = 0; 
     } 
    }; 

    if (i == 1) { 
     //Single click 
     handler.postDelayed(r, 250); 
    } else if (i == 2) { 
     //Double click 
     i = 0; 
     ShowDailog(); 
    } 


    } 
});