2010-03-15 25 views

Trả lời

28

Bạn nên làm việc với một cái gì đó giống như vậy:

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; 
    } 
} 

Đó là một sự khởi đầu, nhưng bạn cần phải xử lý case MotionEvent.ACTION_MOVEcase MotionEvent.ACTION_UP để chắc chắn rằng bạn xử lý đúng cách với đầu vào của người dùng. Phương pháp onTouchEvent được gọi mỗi khi người dùng: đặt ngón tay xuống, di chuyển ngón tay đã có trên màn hình hoặc nhấc ngón tay lên. Mỗi lần sự kiện này mang tọa độ X và Y của vị trí của ngón tay. Ví dụ, nếu bạn muốn kiểm tra ai đó đang khai thác bên trong bitmap của bạn, bạn nên làm một cái gì đó như thiết lập một boolean rằng các liên lạc bắt đầu bên trong bitmap trên ACTION_DOWN, và sau đó kiểm tra ACTION_UP rằng bạn vẫn còn bên trong bitmap.

+0

Tôi muốn sử dụng mã của bạn nhưng thắc mắc về làm thế nào để có được x và y của bitmap. Bạn có thể giúp tôi không? –

+0

Nếu bạn đang vẽ bitmap của mình vào canvas, thì bạn phải biết giá trị X và Y của nó khi bạn phải chuyển những giá trị đó làm đối số cho phương thức 'canvas.drawBitmap'. –

0

Điều này sẽ phát hiện một liên lạc và kiểm tra xem nó có trong suốt không. Bạn cần điều này nếu bitmap của bạn không phải là hình chữ nhật. myBitmap chỉ là một lớp chứa đơn giản mà tôi sử dụng.

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; 
} 

Đây là trên cảm ứng mã cho đầy đủ

@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; 
} 
Các vấn đề liên quan