2010-03-15 14 views
9

ग्रेट्स,बिटमैप

क्या कोई भी कैसावास के अंदर एक बिटमैप पर दबाए जाने पर मुझे पता लगाने के बारे में कैसे जाता है?

धन्यवाद

उत्तर

28

तुम इतनी तरह कुछ के साथ काम करना चाहिए है उपयोगकर्ता इनपुट के साथ ठीक से सौदा। onTouchEvent विधि हर बार उपयोगकर्ता को बुलाया जाता है: एक उंगली नीचे रखता है, स्क्रीन पर पहले से ही एक उंगली ले जाता है या एक उंगली उठाता है। प्रत्येक बार जब घटना में एक्स और वाई निर्देशांक होते हैं जहां उंगली होती है। उदाहरण के लिए यदि आप अपने बिटमैप के अंदर किसी को टैप करने की जांच करना चाहते हैं, तो आपको कुछ बूलियन सेट करना चाहिए कि ACTION_DOWN पर बिटमैप के अंदर स्पर्श शुरू हो गया है, और उसके बाद ACTION_UP पर जांच करें कि आप अभी भी बिटमैप के अंदर हैं।

+0

मैं अपने कोड का उपयोग करना चाहते हैं, लेकिन कैसे बिटमैप के x और y पाने के लिए के बारे में चिंता करने के लिए कोड छूने पर है। क्या आप इसमें मेरी मदद कर सकते हैं? –

+0

यदि आप अपने बिटमैप्स को कैनवास में खींच रहे हैं, तो आपको पहले से ही अपने एक्स और वाई मानों को जानना होगा क्योंकि आपको उन्हें 'canvas.drawBitmap' विधि' के तर्क के रूप में पास करना होगा। –

3

स्टीव, गूगल के लिए एक महान लेख और यूआई घटनाक्रम से निपटने @http://developer.android.com/guide/topics/ui/ui-events.html के लिए ट्यूटोरियल है।

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

    switch(action){ 
    case MotionEvent.ACTION_DOWN: 
     if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth()) 
       && y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) { 
      //tada, if this is true, you've started your click inside your bitmap 
     } 
     break; 
    } 
} 

एक शुरुआत है कि है, लेकिन आप case MotionEvent.ACTION_MOVE संभाल करने की जरूरत है और case MotionEvent.ACTION_UP सुनिश्चित करें कि आप बनाने के लिए: यह क्या मुझे शुरू कर दिया गया और यह मेरे लिए महान था :-)

0

यह एक स्पर्श का पता लगाएगा और जांच करेगा कि यह पारदर्शी नहीं है या नहीं। यदि आपके बिटमैप आयताकार नहीं हैं तो आपको इसकी आवश्यकता है। MyBitmap केवल एक साधारण कंटेनर वर्ग है जिसका उपयोग मैं करता हूं।

private boolean clickOnBitmap(MyBitmap myBitmap, MotionEvent event) { 
    float xEnd = myBitmap.originX() + myBitmap.width(); 
    float yEnd = myBitmap.originY() + myBitmap.height();; 


    if ((event.getX() >= myBitmap.originX() && event.getX() <= xEnd) 
    && (event.getY() >= myBitmap.originY() && event.getY() <= yEnd)) { 
     int pixX = (int) (event.getX() - myBitmap.originX()); 
     int pixY = (int) (event.getY() - myBitmap.originY()); 
     if (!(myBitmap.getBitmap().getPixel(pixX, pixY) == 0)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return false; 
} 

यह पूर्णता

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (clickOnBitmap(dog, event)) { 
       Toast.makeText(getContext(), "dog", Toast.LENGTH_SHORT).show(); 
      } else if (clickOnBitmap(mouse,event)) { 
       Toast.makeText(getContext(), "mouse", Toast.LENGTH_SHORT).show(); 
      } 
     return true; 
     case MotionEvent.ACTION_OUTSIDE: 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      return true; 
    } 
    return false; 
} 
संबंधित मुद्दे