2010-08-06 18 views
5

नहीं भेजा जा रहा है मेरे पास एक कस्टम बटन है, जिस पर मैं इसे टचवेन्ट पर कब्जा कर रहा हूं।एंड्रॉइड: कस्टम बटन ऑनक्लिक लिस्टनर को

public class CustomNumber extends ToggleButton { 
boolean drawGlow = false; 
float glowX = 0; 
float glowY = 0; 
float radius = 30; 


public CustomNumber(Context context) { 
    super(context); 
} 


public CustomNumber(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


public CustomNumber(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 


Paint paint = new Paint(); 
{ 
    paint.setAntiAlias(true); 
    paint.setColor(Color.WHITE); 
    paint.setAlpha(70); 
}; 

@Override 
public void draw(Canvas canvas){ 
    super.draw(canvas); 
    if(drawGlow) 
     canvas.drawCircle(glowX, glowY, radius, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    if(event.getAction() == MotionEvent.ACTION_DOWN){ 
     drawGlow = true; 
    }else if(event.getAction() == MotionEvent.ACTION_UP) 
     drawGlow = false; 
    } 
    glowX = event.getX(); 
    glowY = event.getY(); 
    this.invalidate(); 
    return true; 
} 

यह कस्टम बटन ग्रिड का हिस्सा है। जब मैं ग्रिड में यह बटन जोड़ रहा हूं, तो मैंने इसे ऑनक्लिक लिस्टनर सेट कर दिया है। लेकिन, OnClickListener में कोड कभी नहीं बुलाया जाता है।

GridAdapter कोड है, जहां मैं श्रोता के साथ बटन जोड़ने हूँ:

public View getView(final int position, final View convertView, final ViewGroup parent) { 
    CustomNumber tBtn; 
    if (convertView == null) { 
     tBtn = new CustomNumber(context); 
     tBtn.setTextOff(""); 
     tBtn.setTextOn(""); 
     tBtn.setChecked(false); 
     tBtn.setId(position); 
     tBtn.setOnClickListener(tBtnListener); 
     tBtn.setLayoutParams(new GridView.LayoutParams(35, 35)); 
    } else { 
     tBtn = (CustomNumber) convertView; 
    } 
    return tBtn; 
} 

कृपया मदद करते हैं।

+0

ओवरराइड नहीं कर रहे हैं यदि मैं ऑन टचवेन्ट कोड को हटा देता हूं, तो ऑनक्लिकलिस्टर कोड काम करता है। दोनों घटनाओं को एक साथ संभाला नहीं जा सकता ??? कृपया सहायता कीजिए! – Pria

+1

निश्चित नहीं है लेकिन अंत में आप अपने टच में सच या गलत लौटते हैं या नहीं? –

+0

मैंने onTouchEvent() से झूठी वापसी करने की कोशिश की। यह काम नहीं करता है :(आगे, यह घटना को मोशनएवेंट के रूप में लेता है। ACTION_DOWN हमेशा – Pria

उत्तर

0

मुझे लगता है कि माथीस की टिप्पणी सही है, आपको अपने ऑन टचवेन्ट विधि में झूठी वापसी करनी होगी जब आप ऑनक्लिक() ईवेंट श्रोता को बाद में टच() ईवेंट श्रोता के बजाय ट्रिगर करना चाहते हैं।

आप और अधिक सटीक पूर्णांक UI Events documentation

+0

मैंने ऑन टचइवेंट() से झूठी वापसी करने की कोशिश की। यह काम नहीं करता है :(आगे, यह घटना को मोशनवेन्ट के रूप में लेता है। ACTION_DOWN हमेशा – Pria

+0

ठीक है, इसके बारे में भूल जाओ झूठी वापसी। क्या आप सुनिश्चित हैं कि ऑनक्लिक लिस्टनर सेट करने वाले getView को – Longfield

+0

कहा जाता है जैसे ही मैं अपने ऑन टचवेन्ट कोड पर टिप्पणी करता हूं ... onClickListener कोड काम करना शुरू कर देता है :( – Pria

0

तुम सिर्फ OnTouchEvent में अपने कोड निष्पादित कर सकते हैं पा सकते हैं (एक क्लिक MotionEvent.ACTION_DOWN के रूप में आप पहले से ही पता है)?

2

अपनी गतिविधि में ऑनटच लिस्टनर को लागू करने का प्रयास करें (ऑनक्लिक लिस्टनर के बजाय) और ऑनक्लिक() को ऑन टच() पर बदलें। यह मेरे लिए काम किया। गतिविधि से मेरे कस्टम व्यू और टच() पर टचएवेंट दोनों को बुलाया जा रहा है। अपने कस्टम व्यू के OnTouchEvent में ऑन टच() और "सत्य" में "झूठी" लौटने के लिए Remeber।

6

अपने onTouchEvent कार्यान्वयन में, के बजाय "return true;", कर ...

return super.onTouchEvent(event); 

आप सुपर क्लास 'कार्यान्वयन जो क्या श्रोता फोन करने के लिए जिम्मेदार है अधिभावी कर रहे हैं। सुपरक्लास 'कार्यान्वयन को कॉल करके इसे पहले कार्य करना चाहिए जैसा कि पहले किया गया था। यही कारण है कि जब आप विधि को टिप्पणी करते हैं तो आपका कोड काम करता है - क्योंकि अब आप सुपरक्लास 'कार्यान्वयन

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