2011-12-08 14 views
5

मैं एक बहुत ही सरल थोड़ा आवेदन एक विस्तारित दृश्य का उपयोग कर पर काम कर रहा हूँ में rectF अंदर दबाया। समस्या यह है कि मुझे अपने ऑन टचएवेंट में दबाया नहीं जा सकता है। मुझे समझा है कि मुझे दबाव-बिंदु (एक्स और वाई) तत्वों की तुलना करना है और यह देखना है कि यह कौन सा हो सकता है।चेकइन अगर onTouchEvent

लेकिन ... मैं एक आयत का उपयोग कर घोषित किया है:

Paint color= new Paint(); 
color.setColor(Color.BLACK); 
rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ; 
canvas.drawRect(rectF, color); 

अब तक तो अच्छा है, लेकिन onTouchEvent समारोह

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x, y)) { 
      // Something should happen 
     } 

    } 

    invalidate(); 
    return true ; 
} 

में मैं रिश्तेदार के कुछ प्रकार के साथ rectF सेट 0-1 से लेकर अंक, लेकिन एक्स और वाई मैं घटना से मिलता हूं स्क्रीन के आकार के आधार पर 0 और ऊपर की दूरी पर है।

मैं आसानी से किसी एक मान का परिवर्तित कर सकते हैं?

संपादित

सोचा कोई अंतिम समाधान में रुचि थी ...

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    int width = this.getWidth() ; 
    int height = this.getHeight() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x/width, y/height)) { 
      // Something should happen 
     } 

    } 

    return true ; 

} 

उत्तर

2

स्पर्श बिंदु और RectF के मूल्यों होने के लिए oreder में एक ही संदर्भ पैमाने पर होना जरूरी ठीक से तुलना की। जिसका अर्थ है कि सापेक्ष आकार का उपयोग करता है, तो आप अपने RectF घोषित करने के लिए (0-1) आप या तो की आवश्यकता होगी करने के लिए:

1: 2 आपकी स्क्रीन के आकार

या द्वारा MotionEvent स्थिति को सामान्य: द्वारा "denormalize" RectF आयाम आपका वास्तविक स्क्रीन आकार।

मुझे लगता है कि 1 आम तौर पर preferrable है के रूप में यह आप रिश्तेदार लेआउट, वास्तविक स्क्रीन आकार के स्वतंत्र के संदर्भ में अपने rects को परिभाषित करने और ऑन-द-मक्खी घटना पदों में परिवर्तित कर सकते हैं।

इस तरह: rectF.contains(x/screenWidth, y/screenHeight);

आप अपने गतिविधि में
Display display = getWindowManager().getDefaultDisplay() बुला और फिर display.getWidth() या display.getHeight()

+0

मैंने पाया कि मैं नहीं बल्कि चौड़ाई और देखने की ऊंचाई चाहता था फोन करके स्क्रीन आयाम प्राप्त कर सकते हैं, तो मैं इस्तेमाल किया 'this.getHeight() 'और' this.getWidth() 'इसके बजाय। – dubbe

+0

@dubbe यकीन है कि, मैं अपने संदर्भ के बारे में पता नहीं था, इसलिए मैं सबसे सामान्य स्थिति – kostja

+0

मुझे पता है के बारे में सलाह दी, और यह सही सलाह था, मैं सिर्फ किसी और मामले में किसी को यह स्पष्ट किया एक ही बात के लिए खोज कर रहा है! – dubbe

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